我试图对两个表进行完全外部联接,使它们与表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个工艺代码。
答案 0 :(得分:1)
false
的列中的FULL JOIN
值在两个表中都不匹配的行中返回。您的NULL
子句将这些过滤掉-因为WHERE
比较几乎永远不会算作“真”(NULL
和IS NULL
安全比较除外)。
您想要做的就是将这些条件移到NULL
子句中。无论如何,这就是它们所属的位置,因为它们实际上是ON
个条件:
JOIN
答案 1 :(得分:0)
这是因为您的where子句
rev.[Project Name] = cost.[Project Name]
AND rev.[Lot] = cost.[Lot];
由于您提到的那些项不在table A
中,而是在table B
中,因此您基本上是通过WHERE
子句删除它们的。
如果要显示这5个项目,请尝试删除where
子句,然后再次运行查询。