假设我有表A,B A中的ID是唯一的,但在表B中,ID不是唯一的
我想选择DISTINCT ID
查询1:
从左边连接中选择DISTINCT ID B b a a.ID = B.ID WHERE ...
查询2:
从一个WHERE ID IN中选择DISTINCT ID(从B中选择DISTINCT ID ......)
或
从左边连接中选择DISTINCT ID(从B中选择DISTINCT ID)b on a.ID = B.ID WHERE ...
最终结果相同,但
在查询1中发生的事情是临时表的空间更多,因为表B中的多行将带有重复的ID
在查询2中,我能够优化空间和进一步处理,因为它将具有所有不同ID的有限行
有没有办法使用连接和避免子查询来使用表B中的DISTINCT行?
实际上我甚至还有表C,我将加入这个表,所以我需要关心参加第二次连接的行数,当你进一步加入表C时。
答案 0 :(得分:0)
SELECT DISTINCT ID FROM A a LEFT JOIN (SELECT DISTINCT ID FROM B) b ON a.ID = B.ID WHERE ...
这是你想要的吗?
编辑以便答案更加明显:
由于您的A是唯一的,但B不是您可以交换值:
SELECT DISTINCT ID FROM B b LEFT JOIN A a on a.ID = b.ID WHERE...