在多对多表中查找重复条目

时间:2014-02-04 19:48:49

标签: sql many-to-many one-to-many

我们有两个对象应该有一对多的关系,但无论出于什么原因,关系被配置为多对多。所以,我们知道这是不正确的,但实际上症状是目前需要修复的,这就是数据问题。您如何生成一侧所有记录的列表,这些记录与另一侧的多个记录相关联?即使我们还无法修复关系,此列表也将用于修复数据。

该表包含xy之间的关系,该关系有两列:nManySide1nManySide2nManySide1包含x表中的主键,nManySide2包含y表中的主键。

这是我们提出的查询,但它根本没有结果:

SELECT nManySide1, count(nManySide1),nManySide2, count(nManySide2) from dbo.X_Y
GROUP BY nManySide1, nManySide2
HAVING (COUNT(nManySide1) > 1 and COUNT(nManySide2) > 1)

我们的临时解决方案是将表转储到Excel,使用条件格式在Y中标记重复项,然后删除/隐藏所有未标记的行。但是,我们希望能够自动化,让我们知道重复项已经创建并需要修复,直到我们能够以一对多的方式重新创建关系。

1 个答案:

答案 0 :(得分:0)

您没有指定是否可能在表格中显示重复项。如果是这样,那么你会想要:

SELECT nManySide1, count(distinct nManySide2) as cnt
from dbo.X_Y
GROUP BY nManySide1
HAVING count(distinct nManySide2) > 1;