Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得同时包含匹配记录和不匹配记录的mysql结果集_Mysql_Sql_Join_Left Join - Fatal编程技术网

如何获得同时包含匹配记录和不匹配记录的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