如何获得同时包含匹配记录和不匹配记录的mysql结果集
我有以下表格:如何获得同时包含匹配记录和不匹配记录的mysql结果集,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,我有以下表格: suppliers id name 1 s1 2 s2 3 s3 及 我需要一个如下所示的结果集: supplierName productSupplier s1 null s2 1 s3 null 我尝试了如下的左连接: select * from suppliers left join product_suppliers on suppliers.id = pro
suppliers
id name
1 s1
2 s2
3 s3
及
我需要一个如下所示的结果集:
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关联的lemon,我还需要其他供应商,以便将来进行关联
谢谢 只需将条件从
where
子句移动到左连接的部分的。where
子句中的条件是强制性的,因此,如果产品供应商中的记录不匹配,它将从结果集中删除该记录
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
子句移动到左连接的部分的。where
子句中的条件是强制性的,因此,如果产品供应商中的记录不匹配,它将从结果集中删除该记录
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的产品删除where条件,即仅过滤id为9的产品
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