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