Mysql计数左连接奇怪的结果

时间:2019-02-27 14:45:17

标签: mysql count left-join amazon-rds mysql-8.0

有人可以帮助我了解这些结果吗? (对我来说,所有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

1 个答案:

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