使用不同的行来连接mysql

时间:2015-05-20 11:24:23

标签: mysql

假设我有表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时。

1 个答案:

答案 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...