为什么MySQL没有通过此查询删除条目?
DELETE FROM transport_cms.page WHERE Id IN (SELECT * FROM ( SELECT g.Id FROM transport_cms.page g, transport_cms.page p where g.Url = p.Url and g.Site_id = p.Site_id and g.Id != p.Id group by p.Site_id) AS p);
答案 0 :(得分:0)
SELECT g.Id FROM transport_cms.page g, transport_cms.page p where g.Url = p.Url and g.Site_id = p.Site_id and g.Id != p.Id group by p.Site_id
此脚本无效。
select
不能包含group
以外的字段。
答案 1 :(得分:0)
您的查询部分有效: -
drop table if exists transport_cms_page;
create table transport_cms_page (id int,url varchar(3),site_id int);
insert into transport_cms_page values
(1,'aaa',1),(2,'aaa',1), (3,'aaa',1);
MariaDB [sandbox]> DELETE FROM transport_cms_page
-> WHERE Id IN (
-> SELECT * FROM (
-> SELECT g.Id
-> FROM transport_cms_page g, transport_cms_page p
-> where g.Url = p.Url and g.Site_id = p.Site_id and p.Id <> g.Id
-> group by p.Site_id
-> ) AS p
-> );
Query OK, 1 row affected (0.03 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> select * from transport_cms_page;
+------+------+---------+
| id | url | site_id |
+------+------+---------+
| 1 | aaa | 1 |
| 3 | aaa | 1 |
+------+------+---------+
2 rows in set (0.00 sec)
这可能更合适
MariaDB [sandbox]> DELETE FROM transport_cms_page
-> WHERE Id not IN
-> (
-> select minid
-> from
-> (select url,site_id, min(id) minid
-> from transport_cms_page
-> group by url,site_id
-> ) m
-> );
Query OK, 2 rows affected (0.02 sec)
MariaDB [sandbox]>
MariaDB [sandbox]>
MariaDB [sandbox]> select * from transport_cms_page;
+------+------+---------+
| id | url | site_id |
+------+------+---------+
| 1 | aaa | 1 |
+------+------+---------+
1 row in set (0.00 sec)