Mysql count left join странный результат - PullRequest
0 голосов
/ 27 февраля 2019

Может ли кто-нибудь помочь мне понять эти результаты?(Для меня все 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 голосов
/ 27 февраля 2019

Ваше первое объединение использует предложение WHERE, это означает, что он выбирает все строки, в том числе те, которые имеют нулевое соединение, а затем отфильтровывает те, ГДЕ pa.code = season, т.е. нулевые объединения.

последнее объединяется с обоими, но поскольку это левое объединение, вы по-прежнему получаете полную таблицу результатов, и ничего не фильтруется, поскольку вы удаляете предложение WHERE.Если бы вы использовали INNER JOIN в последнем запросе, вы должны получить тот же результат (6332).

Эта ссылка может быть полезной В чем разница между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULLРЕГИСТРИРУЙТЕСЬ

...