【发布时间】:2019-10-25 08:29:33
【问题描述】:
我正在尝试对两个表进行完全外部联接,将它们与表 1 的“PO 产品代码”和表 2 的“产品代码”进行匹配。每次我尝试这样做时,都会有一些产品遗漏的代码:
CABSCABS0000, DOORINTD0015, FLORCARP0001, EXCL0001, and FLORTILE0000
每个产品代码都在表 2 中,但不在表 1 中。
这是我正在使用的表格的屏幕截图。
https://i.imgur.com/pFAfrAb.png
https://i.imgur.com/k0a3o57.png
这是我尝试过的代码:
SELECT cost.[Actual Close]
,cost.[Project Name]
,cost.[Lot]
,cost.[Model]
,cost.[Elev]
,cost.[PO Product Code]
,cost.[Invoiced + Open] AS 'Invoiced + Open'
,rev.[Gross Sale] AS 'Gross Sale'
FROM Table1 cost FULL OUTER JOIN
Table2 rev
ON rev.[Product Code] = cost.[PO Product Code]
WHERE rev.[Project Name] = cost.[Project Name] AND
rev.[Lot] = cost.[Lot];
我还必须提到,产品代码特定于每个项目名称和批次,这就是为什么将其添加到“WHERE”子句中的原因。
这是我得到的输出,缺少上面列出的 5 个工艺代码。
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);标签和明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)请use text, not images/links, for text--including tables & ERDs. 仅将图像用于无法表示为文本或增强文本的内容。无法搜索或剪切和粘贴图像。
-
了解 FULL JOIN ON 返回的内容:INNER JOIN ON rows UNION ALL 不匹配的左右表行,由 NULL 扩展。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。 WHERE 或 INNER JOIN ON 要求在 OUTER JOIN ON 后从表中删除由 NULL 扩展的任何行,即只保留 LEFT/RIGHT/INNER JOIN ON 行,因此右/左/两个表列不为 NULL,即“将外部联接变为内部联接”。你有那个。
标签: tsql join outer-join full-outer-join