SQL查询显示所有ID,无论是否存在

时间:2018-03-02 08:36:46

标签: sql left-join

我有一个非常基本的SQL问题。有两个表:产品和库存。如果我在库存表中搜索产品ID(使用下面显示的左连接),我将获得库存中具有数量的所有产品ID(名称)。但我希望显示所有产品ID,如果它们不在库存中,则数量为0或Null。

现在我的代码只显示库存表中有数量的ID

Select A.ProductID, A.Name, B.Quantity
From Production.Product A
Left join Production.ProductInventory B
On A.ProductID = B.ProductID
Where B.LocationID = 1

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

你必须移动谓词

B.LocationID = 1

WHERE子句到ON

Left join Production.ProductInventory B 
   On A.ProductID = B.ProductID AND B.LocationID = 1

如果谓词位于WHERE,则LEFT JOIN变为INNER JOIN,因为对于NULL条记录,谓词不会评估为TRUE

因此,您的查询将是:

Select A.ProductID, A.Name, B.Quantity
From Production.Product A
Left join Production.ProductInventory B
   On A.ProductID = B.ProductID AND B.LocationID = 1

这将返回所有 Production.Product条记录。仅当Quantity字段与 Production.ProductInventory匹配时,查询才会返回ProductID的{​​{1}}字段,否则会返回LocationID = 1。< / p>