所以我搞砸了,并填写了一张有重复行的桌子......我有一张这样的桌子(实际上很多像这样的东西:-():
id gname pname value
1 15 13 test
2 15 13 test
3 15 13 test
4 18 18 test
5 18 18 test
6 18 18 test
此表仅允许允许同一个gname,pname和value的一行。
所以现在我需要编写一些sql,将所有这些常见行组合在一起并删除除ONE之外的所有行!哎呀!
任何人都可以帮助我,STEP ONE,我相信只是为了获得一份声明来返回所有重复组。
**顺便说一句 - 我知道这完全是顶了。这是我继承的一个非常古老的系统和一个大客户端,这是使用这个...所以我知道这些问题。我可以修复导致这个ONCE的代码,我把数据库恢复到应该的状态。
谢谢!
答案 0 :(得分:4)
如果id
是唯一的并且自动递增,则很容易:
DELETE Table
WHERE ID NOT IN (SELECT MIN(id)
FROM Table
GROUP BY gname, pname, value)
首先执行SELECT
。
答案 1 :(得分:0)
给它一个机会。它使用RANK函数来提取除了每个gname / pname / value元组的第一个元素。
DELETE a
FROM _table_ a
JOIN
(
SELECT id
, RANK() OVER (PARTITION BY gname, pname, value ORDER BY id ASC) AS r
FROM _table_
) b
ON a.id = b.id
AND b.r > 1