使用非内连接将两个查询联接起来

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、aa和cc。

2
如果这两个表没有关联,最好不要尝试合并它们的结果。 - John Kane
这是两种查询的一个查询。 - Leandro Garcia
1
请指定您想要的输出,以便我们可以相应地制作一个查询。 - Brijesh Patel
@Defensor 是的,谢谢你,这让它更清晰了。你考虑过将每个查询制作成自己的函数吗? - John Kane
结果应该是什么样子? - Andriy M
显示剩余2条评论
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 = ?

但我不建议这样做。


如果查询之间没有任何联系,那么您应该执行这两个查询。


谢谢您,我可以知道为什么不应该这样做的解释吗? - Leandro Garcia
数据库的关键在于关系。将两个不相关的事物连接起来并不是最好的方法。另一方面,你只需访问数据库一次就可以提高性能,所以你可以随心所欲地做 :) - aF.

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
SELECT id, ac, aa FROM tbl_ac WHERE ac = ? AND aa = ?  
AND EXISTS(SELECT id, cc FROM tbl_cc WHERE cc = ?)

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 ) 
";

但是这两个表实际上没有任何关系。 - Leandro Garcia

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谓词仅测试行的存在性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接