选择除查询之外的每个查询的所有行

时间:2014-07-23 14:41:20

标签: mysql

我在某些行中遇到了重复值的情况 - 我希望除了一行之外,删除所有具有该重复值的行。

到目前为止,我已经得到了这个,它会返回所有具有重复值的行:

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的视频之外的所有内容。

2 个答案:

答案 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))