【发布时间】:2009-11-18 19:22:17
【问题描述】:
由于我无法控制的原因,我需要连接两个表并且我需要空值来匹配。我能想到的最佳选择是吐出一个 UUID 并将其用作我的比较值,但它看起来很难看
SELECT * FROM T1 JOIN T2 ON nvl(T1.SOMECOL,'f44087d5935dccbda23f71f3e9beb491') =
nvl(T2.SOMECOL,'f44087d5935dccbda23f71f3e9beb491')
我怎样才能做得更好?如果重要,这在 Oracle 上,上下文是一个应用程序,其中必须将一批用户上传的数据与一批现有数据进行比较,以查看是否有任何行匹配。回想起来,我们应该阻止任一数据集中的任何连接列包含空值,但我们没有,现在我们不得不忍受它。
编辑:需要明确的是,我只关心空值。如果列不为空,我希望它们匹配它们的实际值。
【问题讨论】:
-
表是否连接在空值上?如果是这样的话,你会得到一个相当大的结果集。例如,如果 T1 中有 10 个空值,T2 中有 10 个空值,那么您将获得 100 行。当然,您可以加入另一个填充字段,然后选择 ... 其中 T1.SomeCol 为空而 T2.SomeCol 为空
-
用户函数在大型查询中使用时会对性能产生巨大影响,也许您可以通过使用持久计算字段来改善这一点。我不确定,只是想。
-
您的解决方案有什么问题?除了 UUID,您可以使用列中不存在的任何字符串,例如字符串“null”,以减少内存占用。
-
当你在 cmets 中找到真正的答案...