$query1 = "SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?";
和
$query2 = "SELECT id, cc FROM tbl_cc WHERE cc = ?";
在一个查询中,这两个查询的最佳等价物是什么?我不能使用INNER JOIN
,因为每个表都没有任何关系。
我只是想验证我的数据库中是否存在ac
,aa
和cc
。
答案 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
谓词仅测试行的存在。