3
$query1 = "SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?";

$query2 = "SELECT id, cc FROM tbl_cc WHERE cc = ?";

仅在一个查询中,这两个查询的最佳等效项是什么?我不能使用INNER JOIN它,因为每个表都没有任何关系。

我只想验证ac,是否存在于我的数据库中aacc

4

5 回答 5

4

如果你想要一个查询,你可以这样做:

SELECT id, ac, aa, NULL as cc FROM tbl_ac WHERE ac = ? AND aa = ?
UNION ALL
SELECT id, NULL, NULL, cc FROM tbl_cc WHERE cc = ?

但我不推荐。


如果查询没有以任何方式链接,您应该执行这两个查询。

于 2012-06-27T10:24:26.663 回答
3

http://sqlfiddle.com/#!3/779da/1

你也可以这样做:

select *
from tbl_ac, tbl_cc
where ac = 1 AND aa = 1 AND cc = 1

(如果要带回大量数据,您可以使用 EXISTS 或 COUNT(*))

于 2012-06-27T10:25:51.150 回答
2
SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?  
AND EXISTS(SELECT id, cc FROM tbl_cc WHERE cc = ?)
于 2012-06-27T10:26:24.770 回答
1

如果只有部分表有关系,可以使用LEFT JOIN,将表连接起来,在没有关系的地方填NULL。

$query = "
 SELECT tbl_ac.id, tbl_ac.ac, tbl_ac.aa 
 FROM tbl_ac
 LEFT JOIN tbl_cc ON ( tbl_cc.cc = tbl_ac.ac ) 
";
于 2012-06-27T10:27:49.457 回答
1
SELECT EXISTS (SELECT * FROM tbl_ac WHERE ac = ? AND aa = ?)
   AND EXISTS (SELECT * FROM tbl_cc WHERE cc = ?)

如果两个EXISTS谓词都返回 TRUE,则返回 TRUE,否则返回 FALSE。请注意,您不需要在子查询中指定列EXISTSEXISTS谓词仅测试是否存在行。

于 2012-06-27T10:42:56.487 回答