Mysql count left join 奇怪的结果

Mysql count left join strange result

有人可以帮助我理解这些结果吗? (对我来说,所有 3 个都应该 return 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

您的第一个连接使用 WHERE 子句,这意味着选择所有行,包括具有空连接的行,然后过滤掉那些 pa.code = season 的行,即空连接。

最后一个连接两者,但因为它是左连接,您仍然可以获得完整的 table 结果,并且没有任何内容被过滤,因为您删除了 WHERE 子句。如果您在上一个查询中使用 INNER JOIN,您应该得到相同的结果 (6332)。

这个link可能有用What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?