指示mysql中连接表中是否存在行

时间:2013-04-16 18:28:54

标签: mysql

我正试图集中检查各种表中是否存在数据。我有一个主表,A和各种有关A数据的表 - 称它们为表B,C和D.我想写一个查询,对于A中的每个条目,指示是否有任何行在B,C和D中。

首次尝试如下:

SELECT A.id, count(B.id) as b_count, count(C.id) as c_count, count(d.id) as d_count
FROM A
LEFT JOIN B ON B.a_id = A.id
LEFT JOIN C ON C.a_id = A.id
LEFT JOIN D ON D.a_id = A.id
GROUP BY A.id

这给了我正确的结果 - 每个子表中的行数,在主表中按id列出。但是,这个查询也非常低效,因为它涉及多个连接,我并不关心每个子表中有多少行,只是根本不存在任何行。

有人可以提出更好的选择吗?

2 个答案:

答案 0 :(得分:1)

如果您不关心表格中有多少行

使用:

SELECT EXISTS(SELECT 1 FROM table1 WHERE ...)

参考MYSQL文档: http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

答案 1 :(得分:0)

加入并不是低效的,而是像MySQL这样的关系型数据库管理系统(RDBMS)的优化。只要在所有主键和外键上都有适当的索引,就没有更快的方法来检查表中是否存在行而不是选择它们。