我有一个姓氏列表和他们唯一的ID。在我们的数据库中,我们有两个与姓氏相关的表。第一个表具有当前的姓氏,第二个表具有别名/过去的姓氏。如何仅返回两个表中不存在姓氏的个人的姓氏和ID?
我尝试过使用NOT IN:
SELECT
A.[ID], A.[Last Name]
FROM
Involvement_Data A
INNER JOIN
DIM_CONSTITUENT B ON A.[ID] = B.[LOOKUPID]
LEFT JOIN
DIM_CONSTITUENTALIAS C ON B.[CONSTITUENTSYSTEMID] = C.[CONSTITUENTSYSTEMID]
WHERE
A.[Last Name] NOT IN (B.[LASTNAME], C.[LASTNAME]);
但这些表似乎是单独评估的,导致我重新获得值,因为它在DIM_CONSTITUENT
OR DIM_CONSTITUENTALIAS
中不存在。它不会整体评估表格。我也尝试将NOT EXISTS
与相关子查询一起使用,但似乎仍然得到我不想要的结果。
答案 0 :(得分:6)
如果我理解正确,那你几乎就是
SELECT A.[ID],
A.[Last Name]
FROM Involvement_Data A
LEFT JOIN
DIM_CONSTITUENT B
ON A.[ID] = B.[LOOKUPID]
LEFT JOIN
DIM_CONSTITUENTALIAS C
ON A.[ID] = C.[CONSTITUENTSYSTEMID]
WHERE B.[LASTNAME] is null or C.[LASTNAME] is null;
修改强>
正如@Cameron正确指出的那样,这个答案缺乏任何解释,所以就是这样。
您需要做的是保留第一个表中的所有行,并在可能的情况下将它们与其他两个行的行匹配。结果集将类似于
tableA | tableB | tableC
somerow1 | somerow1 | somerow1
somerow2 | NULL | somerow2
somerow3 | somerow3 | NULL
somerow4 | NULL | NULL
您要保留的行是其名称不在tableB和tableC中的行,因此您只能过滤其中一个为null