如何获取包含匹配和不匹配记录的 MySQL 结果集



我有以下表格:

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 关联的柠檬,我还需要其余供应商进行将来的关联。

谢谢!

只需将条件从where子句移动到left joinon部分即可。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子句中的列
  • 使用表别名

删除 where 条件,这样做只会过滤 ID 为 9 的产品

最新更新