在我的工作中,我们将数据存储在数据库中,数据未规范化。我正在寻找一种方法来查找重复的数据。
我们的数据库有3行列,名称,状态,策略
此数据可能如下所示:
OldTable:
Name | State | Strat
-----+-------+------
A | M | 1
A | X | 3
B | T | 6
C | M | 1
C | X | 3
D | X | 3
我想要做的是将数据移动到两个表中,一个包含名称,另一个包含State和Strats的集合,所以它看起来更像是
NewTable0:
Name | StratID
-----+--------
A | 1
B | 2
C | 1
D | 3
NewTable1:
StratID | State | Strat
--------+-------+------
1 | M | 1
1 | X | 3
2 | T | 6
3 | X | 3
因此在数据示例中,A和C将是重复的,但D不会。我将如何寻找和/或识别这些副本?
答案 0 :(得分:1)
您可以通过将名称分组在一起来找到这一点,并且只列出有多个记录的那些:
SELECT OldTable.Name, COUNT(1) Duplicates
FROM OldTable
GROUP BY OldTable.Name
HAVING Duplicates > 1
应输出:
OldTable:
Name | Duplicates
-----+------------
A | 2
C | 2
答案 1 :(得分:1)
尝试:
SELECT OT1.Name Name1, OT2.Name Name2
FROM OldTable OT1
JOIN OldTable OT2 ON OT1.Name < OT2.Name AND
OT1.State = OT2.State AND
OT1.Strat = OT2.Strat
GROUP BY OT1.Name, OT2.Name
HAVING COUNT(*) = (SELECT COUNT(*) FROM OldTable TC1 WHERE TC1.NAME = OT1.NAME)
AND COUNT(*) = (SELECT COUNT(*) FROM OldTable TC2 WHERE TC2.NAME = OT2.NAME)