我有一个非常基本的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
提前感谢您的帮助!
答案 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>