我有一个包含电影及其链接的数据库。 一部电影可能有更多的链接。 不幸的是,他们中的一些人有两次相同的链接。
例如:
row1 Alien vs. Predator http://www.avplink1
row2 Alien vs. Predator http://www.avplink1
row3 Alien vs. Predator http://www.avplink2
row4 Alien vs. Predator http://www.avplink3
row5 Minions http://www.minionslink1
row6 Minions http://www.minionslink1
我想删除表中多个行,但保留其中一行。 所以我想这样:
row1 Alien vs. Predator http://www.avplink1
row3 Alien vs. Predator http://www.avplink2
row4 Alien vs. Predator http://www.avplink3
row5 Minions http://www.minionslink1
如何编写删除这些行的SQL查询? 谢谢!
编辑:
我用这段代码解决了:
DELETE a
FROM links a
JOIN (SELECT MIN(id) id, movielink
FROM links
GROUP BY movielink) b ON a.movielink= b.movielink
AND a.id <> b.id
谢谢大家的帮助!
答案 0 :(得分:1)
答案 1 :(得分:1)
这是每行中没有唯一ID的痛苦(所有表都应该有一个主键)。可能最简单的方法是在这种情况下使用临时表:
delete t
from t join
(select movie, link, min(rowid) as minrowid
from t
group by movie, link
) tt
on t.movie = tt.movie and t.link = tt.link and t.rowid <> tt.minrowid
如果您拥有唯一ID,则有更简单的方法。执行此操作后,在表上放置一个唯一索引以防止将来发生这种情况:
[Mr.|Ol’] Slome[{r|Dog|Dawg}]
实际上,我认为此声明也会删除重复的行,但我不建议使用索引创建来删除行。
编辑:
如果您有唯一的行标识符,那么您可以这样做:
[]