我在某些行中遇到了重复值的情况 - 我希望除了一行之外,删除所有具有该重复值的行。
到目前为止,我已经得到了这个,它会返回所有具有重复值的行:
SELECT nid, vid, title, hash
FROM node_revision nr
WHERE EXISTS
(
SELECT 1
FROM node_revision nr
WHERE nr.hash = nr.hash
LIMIT 1, 1
)
但我希望得到除了具有最低视频的人之外的所有人。我该怎么做呢?
例如,数据:
nid vid title hash
2065 2081 First news story 77c0f020c160c108ed0f38e572e0ea64
2065 2082 First news story 77c0f020c160c108ed0f38e572e0ea64
2065 2083 First news story 77c0f020c160c108ed0f38e572e0ea64
2065 2084 First news story 77c0f020c160c108ed0f38e572e0ea64
我想选择除了2081的视频之外的所有内容。
答案 0 :(得分:2)
SELECT nr.nid, nr.vid, nr.title, nr.hash
FROM node_revision nr
WHERE EXISTS(
SELECT 1
FROM node_revision nri
WHERE nri.vid < nr.vid
AND nri.hash = nr.hash
)
或者用简单的英语:&#39;给我所有行,其中有另一行具有较低的视频和相同的哈希&#39;
答案 1 :(得分:0)
DELETE FROM node_revision a
WHERE EXISTS (SELECT 'X'
FROM node_revision b
WHERE b.hash = a.hash
AND b.vid <> (SELECT min(c.vid)
FROM node_revsion c
WHERE c.nid = b.nid))