【发布时间】:2020-08-12 17:38:21
【问题描述】:
我正在尝试进行左连接,以便从表 1 中获取所有行,即使第二个表中没有对应的值。
我的结构是:
位置表:
ID LocName
1 Trk1
2 Trk2
3 Trk3
4 Unk
数量表:
ID PartID Quantity LocationID
1 1 2 1
2 3 12 2
3 2 6 1
4 6 8 3
5 6 5 1
我正在尝试加入但也对特定的 PartID 进行查询。我的查询是:
SELECT
INV_LOCATIONS.ID AS LocationID,
INV_LOCATIONS.NAME AS LocationName,
INV_QUANTITY.QUANTITY AS Quantity
FROM INV_LOCATIONS
LEFT JOIN INV_QUANTITY ON INV_LOCATIONS.ID = INV_QUANTITY.LOCATION_ID
WHERE INV_QUANTITY.PART_ID = 1;
我现在的输出是:
ID LocName Quantity
1 Trk1 5
3 Trk3 8
期望的输出是:
ID LocName Quantity
1 Trk1 5
2 Trk2 NULL/0
3 Trk3 8
4 Unk NULL/0
我认为这是因为我有WHERE INV_QUANTITY.PART_ID = 1,这迫使它出现在数量表中。我需要能够验证它是否在正确的部分,但是如果它不存在,我该如何包含它。我知道我以前做过非常相似的事情,但我不记得是哪个项目,所以我在任何地方都找不到代码。
【问题讨论】:
-
把这个条件:
INV_QUANTITY.PART_ID = 1放在ON子句中而不是WHERE -
就可以了。谢谢。
-
这是一个常见问题解答。在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 当你得到一个你不期望的结果时,隔离第一个错误的子表达式并解释你的期望和原因
标签: sql sql-server select left-join