SQL 查找为什么 PK canidate 在未加密的表上有重复项

标签 sql ibm-midrange db2-400

如果我的标题让您头疼……我同意您的意见。除了它是遗留系统的一部分之外,我不想深入了解为什么存在该表,而且该系统还执行“记录级访问”(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/

相关文章:

mysql - 如何处理这个错误 1242 (21000) : Subquery returns more than 1 row

command - 如何创建具有互斥参数的 AS/400 命令?

java - 根据 'number of pages' 标准拆分文本文件

java - 基于 JDBC 的 AS400 风格命名

sql - 仅返回具有最近 TIME 值的记录?

java - Hibernate:何时使用@Index 注释

mysql - 对多个表使用 UNION 和 WHERE

sql - sql中的序列错误。此处不允许使用序列号

db2 - 在 DB2 SQL 中,如何终止已经陷入无限循环的递归函数调用?

C# ADO.Net 到 db2 iseries - 连接无效