【问题标题】:Deleting from table using subquery使用子查询从表中删除
【发布时间】:2012-07-15 09:50:59
【问题描述】:

例如我有这个表“autos”

id | name
--------------
2  | Mercedes
5  | Mercedes
6  | Mercedes
7  | BMW 
9  | BMW 

我想从这个表中删除所有行,除了行,其中每个汽车的 id 是最大的。也就是说,我想删除后,在表中只剩下这几行:

6 | Mercedes
9 | BMW 

我写了这个查询,但这不起作用(也不返回错误)。

DELETE FROM autos WHERE id NOT IN (
    SELECT id FROM (
        SELECT MAX(id) FROM autos GROUP BY name
    ) AS t
)

请告诉我,这个怎么做?

【问题讨论】:

    标签: mysql subquery sql-delete


    【解决方案1】:

    AFAIK,以下应该可以工作:

    DELETE FROM autos WHERE id NOT IN (
        SELECT max_id FROM (
            SELECT MAX(id) as max_id, name FROM autos GROUP BY name
        ) as t
    )
    

    【讨论】:

    • 哦,是的,这个 ..SELECT MAX(id) as max_id.. 对我有帮助,非常感谢。
    【解决方案2】:
    CREATE TABLE autos (`id` int AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30));
    
    
    INSERT INTO autos(name) VALUES ('Mercedes');
    INSERT INTO autos(name) VALUES ('Mercedes');
    INSERT INTO autos(name) VALUES ('Mercedes');
    
    INSERT INTO autos(name) VALUES ('BMW');
    INSERT INTO autos(name) VALUES ('BMW');
    INSERT INTO autos(name) VALUES ('BMW');
    
    DELETE FROM autos 
    WHERE id NOT IN (
       SELECT id FROM ( 
           SELECT max(id) id FROM autos a GROUP BY a.name 
       ) a
    );
    
    Query OK, 4 rows affected (0.14 sec)
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      相关资源
      最近更新 更多