SQL查找PK canidate在未检查表上具有重复项的原因

SQL查找PK canidate在未检查表上具有重复项的原因,sql,ibm-midrange,db2-400,Sql,Ibm Midrange,Db2 400,如果我的头衔伤了你的头。。。我支持你。我不想讨论这个表存在的原因,除了它是一个遗留系统的一部分,该系统也有“记录级访问”(RLA)功能,我知道这对许多表来说都是一个问题,无论如何,提到RLA是因为添加一列将改变表格式,然后许多非常旧的程序将不再工作 显然,添加PK不会改变表格格式。所以有人告诉我,某组钥匙被保证是独一无二的,那么你知道什么。。。事实并非如此。现在我需要展示他们不在哪里 我能想到的就是: 获取表与其主键匹配的叉积 以某种方式在结果集中获得一个count列,用于PK与其自身匹配的条目

如果我的头衔伤了你的头。。。我支持你。我不想讨论这个表存在的原因,除了它是一个遗留系统的一部分,该系统也有“记录级访问”(RLA)功能,我知道这对许多表来说都是一个问题,无论如何,提到RLA是因为添加一列将改变表格式,然后许多非常旧的程序将不再工作

显然,添加PK不会改变表格格式。所以有人告诉我,某组钥匙被保证是独一无二的,那么你知道什么。。。事实并非如此。现在我需要展示他们不在哪里

我能想到的就是:

获取表与其主键匹配的叉积

以某种方式在结果集中获得一个count列,用于PK与其自身匹配的条目数

筛选计数id大于2的值的结果集


我要看看我是否充分扩展了PK,我会发现一些独特的东西

删除约束/唯一索引,插入数据,然后运行此查询:

SELECT col1, col2, ..., coln, COUNT(*)
FROM your_table
GROUP BY col1, col2, ..., coln
HAVING COUNT(*) > 1

其中,
col1,col2,…,coln
是键中的列列表(一列或多列)。结果将是出现多次的键列表以及显示它们出现频率的计数。

您的意思是“添加一行将改变表格格式”还是“添加一列将改变表格格式”啊。。。一个专栏,我来解决这个问题。那太容易了!我有很多选择。。。太可怕了
SELECT * FROM (SELECT ID, COUNT(*) CNT FROM MY_TABLE GROUP BY ID) WHERE CNT > 1
select col1, ... from tab group by col1, ... having count(*)>1;