$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
如果你想要一个查询,你可以这样做:
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 = ?
但我不推荐。
如果查询没有以任何方式链接,您应该执行这两个查询。
http://sqlfiddle.com/#!3/779da/1
你也可以这样做:
select *
from tbl_ac, tbl_cc
where ac = 1 AND aa = 1 AND cc = 1
(如果要带回大量数据,您可以使用 EXISTS 或 COUNT(*))
SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?
AND EXISTS(SELECT id, cc FROM tbl_cc WHERE cc = ?)
如果只有部分表有关系,可以使用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 )
";
SELECT EXISTS (SELECT * FROM tbl_ac WHERE ac = ? AND aa = ?)
AND EXISTS (SELECT * FROM tbl_cc WHERE cc = ?)
如果两个EXISTS
谓词都返回 TRUE,则返回 TRUE,否则返回 FALSE。请注意,您不需要在子查询中指定列EXISTS
。EXISTS
谓词仅测试是否存在行。