1

たとえば、このテーブル「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
)

教えてください、これを作る方法は?

4

2 に答える 2

2

私の知る限り、次のように動作するはずです:

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
)
于 2012-07-15T09:58:05.900 に答える
1
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)

お役に立てれば!

于 2012-07-15T10:04:51.097 に答える