【发布时间】:2020-06-27 07:38:21
【问题描述】:
我有一个加载数据的表。它不应该包含重复的 ID,但它不是一个完美的世界,人们会犯错误并发生重复。我的表看起来像这样,但有很多很多列:
ID col_a col_b col_c col_d
1 1 d f e
2 r g v s
2 r s v s
3 dd ee tt ww
3 rf DD tt ww
3 dd DD tt ww
3 rf ee tt ww
4 a a a a
如您所见,cloumn col_b 会导致 ID = 2 重复,而 col_a 和 col_b 会导致 ID = 3 重复。我可以通过如下简单查询来识别具有重复行的 ID:
select * from (select ID, count row from TABLE group by ID) where ROW > 1;
这将返回类似:
ID ROW
2 2
3 4
但真正对我有帮助的是返回如下内容的查询:
ID col_a col_b col_c col_d ROW
2 TRUE 2
3 TRUE TRUE 4
...或任何其他解决方案,不仅会突出显示重复的 ID,还会突出显示导致它们的列。
哦,我正在使用 DB2。
【问题讨论】:
-
如果
ID应该是唯一的,那么为什么不使用唯一约束或作为主键来定义它? -
正如我所提到的......这不是一个完美的世界,人们会犯错误......而其他人......在这种情况下是我:) 必须处理这些错误
-
需要定义表中记录的顺序。您如何确定(3)的第二行是射频。插入到表中的记录不一定是顺序。您是否还有其他列可以确定 id 中记录的顺序
-
这就是为什么您应该将列定义为唯一的 - 以防止错误
-
伙计们,我完全明白应该做什么。事实上,我完全同意你的看法。但在这种情况下,我们从客户那里获得数据并被告知“处理它”。我无法控制源数据,也无法提供任何会改变事情的反馈。它基本上是“让它工作”