有人可以帮助我了解这些结果吗? (对我来说,所有3个都应返回6455)。
(使用RDS mysql-8.0.13)
SELECT COUNT(p.product_id) FROM product p LEFT JOIN product_attributes pa ON p.pdt_id = pa.pdt_id WHERE pa.code = 'season';
结果:6332
SELECT COUNT(*) FROM product p;
结果:6455
SELECT COUNT(p.product_id) FROM product p LEFT JOIN product_attributes pa ON p.pdt_id = pa.pdt_id AND pa.code = 'season';
结果:6455
答案 0 :(得分:4)
您的第一个联接使用WHERE子句,这意味着坐在所有行中,包括具有空联接的行,然后过滤掉pa.code = season的WHERE行,即空联接。
最后一个连接在两个连接上,但是由于它是左连接,因此您仍然可以获得完整的结果表,并且由于删除了WHERE子句而没有任何内容被过滤。如果要在上一个查询中使用INNER JOIN,则应该获得相同的结果(6332)。
此链接可能很有用What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?