不通过内连接加入两个查询

时间:2012-06-27 10:14:15

标签: mysql sql join

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

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

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

我只是想验证我的数据库中是否存在acaacc

5 个答案:

答案 0 :(得分: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 = ?

但我不建议。


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

答案 1 :(得分:3)

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

你也可以这样做:

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

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

答案 2 :(得分:2)

SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?  
AND EXISTS(SELECT id, cc FROM tbl_cc WHERE cc = ?)

答案 3 :(得分: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 ) 
";

答案 4 :(得分:1)

SELECT EXISTS (SELECT * FROM tbl_ac WHERE ac = ? AND aa = ?)
   AND EXISTS (SELECT * FROM tbl_cc WHERE cc = ?)

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