【发布时间】:2016-09-14 06:55:40
【问题描述】:
我有两个表,例如 dt1 和 dt2。
我想根据某些列在 dt1 中查找数据,但在 dt2 中不匹配。(动态)
我想出的方法是左连接两个表并找到其列具有空值的那些。
但问题是如何使用动态列号加入它们。
例如,如果最初我想通过 N 列加入它们,但如果 dt2 中的列的 1 为空或 null,那么我想通过其余 N-1 列加入它们。
例如:
dt1:
ColA, ColB, ColC, ColD
1A 1B 1C 1D
2A 2B 2C 2D
3A 3B 3C 3D
4A 4B 4C 4D
dt2:
ColAA ColBB ColCC, ColE
1A 1B null 1E
2A 2X null 2E
3A 3B 3C 3E
null null 4C 4E
dt1 left join dt2 by ColA=ColAA, ColB=ColBB and ColC=ColCC
如果其中之一为空,则加入其余列。
预期结果:
ColA, ColB, ColC, ColD, ColE
1A 1B 1C 1D 1E
2A 2B 2C 2D null
3A 3B 3C 3D 3E
4A 4B 4C 4D 4E
ColE中的值为null的数据就是我想要的。(2A,2B,2C,2D,null)
现在只能通过固定列加入它们,如何实现上述场景。
非常感谢。
【问题讨论】:
-
第1行和第2行的数据是一样的。但为什么在预期结果中,第 1 行和第 2 行不同?因为第 2 行中的 ColE 为空?
-
如果数据不存在,那么您就无法加入它,您需要某种形式的一致性,否则从长远来看,您将产生更大的问题
-
如果所有行的 ColCC 列都为 null 怎么办?所有行都具有相同的列,它们为空或填充了值。但我不知道在运行时哪一列将为空。例如,在第一轮中,ColCC 可能对所有行都为空,而在第二轮中,ColAA 和 ColBB 可能对所有行都为空。