Проблема с Count () и левым соединением

У меня возникла проблема с запросом, который отображает список магазинов с количеством связанных с ним продуктов. Я уже давно играю с левыми соединениями и т. Д., Но безрезультатно. Таблицы имеют следующие структуры:

Таблица магазинов, содержащая столбцы: id , name

Таблица продуктов, содержащая столбцы: id , name , status , shop

Запрос выглядит следующим образом:

 select s.name , p.name , count(p.id) from Product as p left join Shop as s on p.shop=s.id where p.status <> '8796107276379' group by s.id 

Я не получаю магазины, у которых есть 0 продуктов. Как я могу достичь этого, пожалуйста?

Базовая база данных – это MySQL.

Благодаря! Krt_Malta

Вам нужен МАГАЗИН на стороне LEFT, так как правая сторона – это та, которая может не иметь данных, в этом случае PRODUCT.

Не только это, вам нужно условие WHERE как условие LEFT-JOIN ON, так что оно присоединяется к продуктам в состоянии состояния и просто дает скидку на продукт (при сохранении магазина), даже если статус не нужен.

 select s.name , p.name , count(p.id) from Shop as s left join Product as p on p.shop=s.id AND p.status <> '8796107276379' group by s.id, p.name 
 select s.name , p.name , count(p.id) from Shop as s left join Product as p on s.id=p.shop where p.status <> '8796107276379' group by s.id 

Вам нужно добавить OR p.status IS NULL в ваше предложение where.

 select s.name, p.name, count(p.id) from Shop s left join Product p on p.shop = s.id where (p.status <> '8796107276379' OR p.status IS NULL) group by s.name, p.name 

Я тоже страдал этой ошибкой, и хотя я не совсем уверен, почему, полагая предикат на самом Jojn, а не на самом главном запросе, как его решить.

Я действительно документировал все это, прежде чем читать это. Я использовал простой пример с двумя двумя маленькими таблицами, это объясняет, я надеюсь, что разница, может быть, это поможет

http://simpleritsolutions.com/sql/left/join/problems