Mysql 是否删除具有相同列值的记录?

Mysql 是否删除具有相同列值的记录?,mysql,Mysql,我有一个表,其中有一些记录具有相同的地址\ id,我想将它们全部删除,或者如果可以在第一个记录之后全部删除,例如: id | person_id | address_id 1 80 3 2 226 3 3 31 5 4 46 9 5 11 9 6 123 9 在这种情况下,我想删除id为2、5、6

我有一个表,其中有一些记录具有相同的地址\ id,我想将它们全部删除,或者如果可以在第一个记录之后全部删除,例如:

id | person_id | address_id
1       80            3
2       226           3
3       31            5
4       46            9
5       11            9
6       123           9
在这种情况下,我想删除id为2、5、6的记录

这是我的查询,但我得到一个错误:

无法在中为更新指定目标表“person\u address” 条款


选择工作正常。

您的选择似乎也不正确。你可以试试这样的东西-

delete from person_address
 where id not in (select *
                    from (SELECT min(id)
                            FROM person_address
                           WHERE person_address.person_id < 400000
                           GROUP BY address_id) temp)
   and person_id < 400000

您可以通过在同一个表中创建两个对象来删除重复记录。 像


创建一个新表,只保留您想要保留的记录,这通常会更快。我不理解删除2、5、6的逻辑?@TimBiegeleisen我想删除所有具有此地址id的记录,而不是第一个。@TimBiegeleisen加油。一定要跟上-
delete from person_address
 where id not in (select *
                    from (SELECT min(id)
                            FROM person_address
                           WHERE person_address.person_id < 400000
                           GROUP BY address_id) temp)
   and person_id < 400000
Delete p1 
from person_address p1, person_address p2
where
p1.person_id < 400000
and p1.address_id = p2.address_id
and p1.id > p2.id;
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,person_id INT NOT NULL
,address_id INT NOT NULL
);

INSERT INTO my_table VALUES
(1    ,   80       ,     3),
(2     ,  226  ,         3),
(3     ,  31   ,         5),
(4     ,  46   ,         9),
(5     ,  11   ,         9),
(6     ,  123  ,         9);

CREATE TABLE my_new_table AS
SELECT x.* FROM my_table x JOIN (SELECT MIN(id) id FROM my_table GROUP BY address_id) y ON y.id = x.id;

SELECT * FROM my_new_table;
+----+-----------+------------+
| id | person_id | address_id |
+----+-----------+------------+
|  1 |        80 |          3 |
|  3 |        31 |          5 |
|  4 |        46 |          9 |
+----+-----------+------------+
3 rows in set (0.01 sec)

ALTER TABLE my_new_table MODIFY id SERIAL PRIMARY KEY;

ALTER TABLE my_new_table MODIFY address_id INT UNIQUE;