当我运行以下查询时,我返回了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子句建立的条件相同(即这两行实际上是多余的)。
显然情况并非如此,但我无法弄清楚原因。
答案 0 :(得分:1)
left join
会返回t1
的所有记录,并为null
的列返回t2
,以表示无法进行联接的所有记录。
但where
子句会过滤所有数据,无论从哪个表开始。因此,当您在t2
子句中对where
进行过滤时,所有无法进行加入的记录(以及t2.account_id
为null
)都会从结果中排除{ {1}}。
基本上,您的null != t1.account_id
条款会将where
变为left join
。