【发布时间】:2015-08-01 14:48:03
【问题描述】:
假设我有表 A、B A 中的 ID 是唯一的,但表 B 中的 ID 不是唯一的
我想选择 DISTINCT ID
查询 1:
从 A a LEFT JOIN B b ON a.ID = B.ID WHERE 中选择 DISTINCT ID ...
查询 2:
SELECT DISTINCT ID FROM A WHERE ID IN (SELECT DISTINCT ID FROM B where ...)
或
SELECT DISTINCT ID FROM A a LEFT JOIN (SELECT DISTINCT ID FROM B) b ON a.ID = B.ID WHERE ...
结果是一样的,但是
在查询 1 中发生的情况是临时表的空间更多,因为表 B 中的多行将带有重复的 ID
在查询 2 中,我能够优化空间和进一步处理,因为它将具有所有不同 ID 的有限行
有没有什么方法可以使用表 B 中的 DISTINCT 行使用连接并避免子查询?
实际上,我什至有表 C,我将加入它,所以在进一步加入表 C 时,我需要注意参与第二次加入的行数。
【问题讨论】:
-
注意:查询 1 和 2 的结果不必相同,因为您使用的是
LEFT JOIN,所以查询 1 也会返回表 B 中不匹配的行。 -
我已经对问题进行了编辑,我们假设根据我们提出的条件我们有相同的结果
标签: mysql