我在那篇文章之前经常搜索过,这是我的问题:
表:
table1
table2
table3
table4
table5
table6
table7
table8
table9
table10
表1有:
id (primary key), cola, colb, colc
在表1中,可乐重复了 cola 列值:
abc
abc
在表2中:
wid (it's id from table1), cola, colb, colc
表3:
wid (it's id from table1), cola, colb, colc, cold
等等,所有表格内容都是wid。
我要做的是删除重复行依赖于来自table1的列 cola 并仅保留1.然后从表table2,table3,table4,table5中删除行,...与table1中已删除的重复行的id相同。
答案 0 :(得分:0)
让我们看看能否提供帮助。
要查找欺骗,您可以使用分区并添加一个rownumber:
WITH FindDupes AS (
SELECT[[id],
row_number() OVER(PARTITION BY cola ORDER BY id) AS [rn]
FROM Table1
)
SELECT * FROM FindDupes WHERE [rn] > 1
通过这种方式,您可以找到所有重复的行ID。
您还可以展开查询以删除所有表格中的ID。
WITH DeleteDupes AS (
SELECT[[id],
row_number() OVER(PARTITION BY cola ORDER BY id) AS [rn]
FROM Table1
)
DELETE t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 FROM
table1 as t1
INNER JOIN table2 as t2 on t1.id = t2.wid
INNER JOIN table3 as t3 on t1.id = t3.wid
INNER JOIN table4 as t4 on t1.id = t4.wid
INNER JOIN table5 as t5 on t1.id = t5.wid
INNER JOIN table6 as t6 on t1.id = t6.wid
INNER JOIN table7 as t7 on t1.id = t7.wid
INNER JOIN table8 as t8 on t1.id = t8.wid
INNER JOIN table9 as t9 on t1.id = t9.wid
INNER JOIN table10 as t10 on t1.id = t10.wid
WHERE t1.id in (SELECT id FROM DeleteDupes WHERE [rn] > 1)
这会留下一行重复项,并从所有10个表中删除所有其他项。 您没有指定应保留哪些重复项。如果要修改它,可以通过更改ORDER BY子句来完成此操作。要保留的应该是首先导致ORDER BY子句。