0

我正在尝试检查各种表中是否存在数据。我有一个主表 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 列出。然而,这个查询也非常低效,因为它涉及多个连接,而且我并不关心每个子表中有多少行,只关心是否有任何行。

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

4

2 回答 2

1

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

利用:

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

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

于 2013-04-16T18:34:32.577 回答
0

加入并不是低效的,它是像 MySQL 这样的关系数据库管理系统 (RDBMS) 的全部优化对象。只要您对所有主键和外键都有正确的索引,除了选择它们之外,没有更快的方法来检查表中是否存在行。

于 2013-04-16T18:31:42.973 回答