我有以下表格:
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 join
的on
部分即可。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 的产品