我有一些信息,其中 IdNumbers(不是主键 Id,只是分配给个人的随机 Id)在我的第一个表中并不总是正确的。
因此,我将在 Id 和名称上加入我的第二个表,并尝试将其放到仅当 IdNumber 不匹配时才加入名称的位置。
我正在使用大致如下的连接语句进行查询(我省略了 SELECT、WHERE 和 ORDER BY 部分,因为我相信它们对这个问题没有影响,我不想令人困惑,因为它们非常复杂 - 如果下面的查询部分应该像我想要的那样工作并且问题显然在其他地方,那么告诉我这样就可以回答我的问题):
FROM Table1
FULL OUTER JOIN Table2 ON ((Table1.IdNumber = Table2.IdNumber)
OR (Table1.IdNumber != Table2.IdNumber
AND Table1.Lname = Table2.Lname
AND Table1.Fname = Table2.Fname))
但是,它会加入多次匹配 ID 和匹配名称的人,如下所示:
Fname M Lname Table1.IdNumber Table2.IdNumber2
Matthew - Smith 1 2
Matthew H Smith 2 1
Matthew - Smith 1 1
Matthew H Smith 2 2
所以它是因为他们的 id 匹配而拉最后 2 个,但也因为他们的 id 不匹配并且他们的名字匹配而加入前 2 个,但是为什么它甚至要加入前 2 个呢?我怀疑它在决定加入哪里时会忽略 != 语句,因为其他条件都已满足,但我希望它以某种方式考虑这个 != 语句。
如果这应该起作用,就像我之前说的那样,请告诉我,它会回答我的问题。
(*编辑)对不起,我应该正确命名这些 - 我已经修改了名称。并且完整的外部连接是必要的,无论如何我都需要两个表中的所有内容并且它工作正常,但感谢您的建议。