由于无法控制的原因,我需要连接两个表,并且需要空值来进行匹配。我能想到的最好的选择是吐出一个UUID并将其用作我的比较值,但这看起来很难看
SELECT * FROM T1 JOIN T2 ON nvl(T1.SOMECOL,'f44087d5935dccbda23f71f3e9beb491') = nvl(T2.SOMECOL,'f44087d5935dccbda23f71f3e9beb491')
我该如何做得更好?如果重要的话,这是在Oracle上进行的,并且上下文是一个应用程序,在该应用程序中必须将一批用户上载的数据与一批现有数据进行比较,以查看是否有任何行匹配。回想起来,我们应该阻止任何一个数据集中的连接列包含空值,但是我们没有,现在必须忍受它。
编辑:明确地说,我 不仅 关注空值。如果列不为空,我希望它们与它们的实际值匹配。
也许这行得通,但我从未真正尝试过:
SELECT * FROM T1 JOIN T2 ON T1.SOMECOL = T2.SOMECOL OR (T1.SOMECOL IS NULL AND T2.SOMECOL IS NULL)