如果我的标题让您头疼……我同意您的意见。除了它是遗留系统的一部分之外,我不想深入了解为什么存在该表,而且该系统还执行“记录级访问”(RLA),我知道这对许多表来说都是一个问题,无论如何 RLA 是之所以提到是因为添加一列会改变表格格式,然后许多非常旧的程序将不再工作...
显然,添加 PK 不会更改表格格式。所以有人告诉我,某组 key 保证是唯一的,那么你知道什么......它不是。现在我需要展示它们不在的地方。
我能想到的是:
获取表与其主键匹配的叉积。
以某种方式在结果集中获取一个计数列,用于记录 PK 与自身匹配的条目数。
为计数 id 大于 2 的值过滤该结果集。
我要看看我是否充分扩展了 PK,我真的会发现一些独特的东西。
最佳答案
删除约束/唯一索引,插入数据,然后运行此查询:
SELECT col1, col2, ..., coln, COUNT(*)
FROM your_table
GROUP BY col1, col2, ..., coln
HAVING COUNT(*) > 1
其中 col1, col2, ..., coln
是您的键中的列列表(一个或多个列)。结果将是出现不止一次的键列表以及显示它们出现频率的计数。
关于SQL 查找为什么 PK canidate 在未加密的表上有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444781/