Как я могу получить набор результатов mysql, который содержит как сопоставленные, так и несопоставленные записи - PullRequest
1 голос
/ 19 января 2020

У меня есть следующие таблицы:

suppliers
id  name
1   s1
2   s2
3   s3
products
id  name
1   ...
2   ...
..  ...
9   lemon
..  ...

и

product_suppliers
id supplier_id product_id  
1  2           9

Мне нужен набор результатов, похожий на следующий:

supplierName     productSupplier
s1               null
s2               1 
s3               null

Я попробовал левое соединение, как показано ниже:

select * from suppliers 
left join product_suppliers on suppliers.id = product_suppliers.supplier_id
where product_suppliers.product_id = 9

, но набор результатов содержит только лимон, связанный с поставщиком s2, и мне также нужны остальные поставщики для будущей ассоциации.

спасибо!

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Удалите условие where, выполнив то, что вы фильтруете только продукт с идентификатором 9

0 голосов
/ 19 января 2020

Просто переместите условие из условия where в on часть left join. Условия в предложении where являются обязательными, поэтому, если запись не совпадает с product_suppliers, она будет исключена из набора результатов.

select s.name supplier_name, ps.id product_supplier
from suppliers s
left join product_suppliers ps on s.id = ps.supplier_id and ps.product_id = 9

Я также изменил ваш запрос, чтобы реализовать несколько рекомендаций:

  • перечислить столбцы в предложении SELECT
  • использовать псевдонимы таблицы
...