MySQL LEFT JOIN ON ON b与包括WHERE IN(b)相比

时间:2017-12-30 02:20:14

标签: mysql

当我运行以下查询时,我返回了2769行。

SELECT * 
FROM table1 t1
LEFT JOIN table2 t2 ON t2.account_id = t1.account_id;

但是,当我在下面添加WHERE子句时,我会返回692行。

SELECT * 
FROM table1 t1
LEFT JOIN table2 t2 ON t2.account_id = t1.account_id
WHERE t2.account_id IN (t1.account_id);

我认为我的LEFT JOIN建立的条件与我的WHERE子句建立的条件相同(即这两行实际上是多余的)。

显然情况并非如此,但我无法弄清楚原因。

1 个答案:

答案 0 :(得分:1)

left join会返回t1的所有记录,并为null的列返回t2,以表示无法进行联接的所有记录。

where子句会过滤所有数据,无论从哪个表开始。因此,当您在t2子句中对where进行过滤时,所有无法进行加入的记录(以及t2.account_idnull)都会从结果中排除{ {1}}。

基本上,您的null != t1.account_id条款会将where变为left join