2017-05-12 12 views
-1

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

より適切かもしれませんか?単に 'SET SQL_SAFE_UPDATES = 0;'を実行してから、サブクエリなどでdelete文を実行するだけですか? –

+0

クエリが正しくありません。問題を解決するための適切な質問を提供してください。 –

+0

transport_cms.pageテーブルのdublicateエントリを削除します。 Dublicate - Urlフィールドが等しいとき、Site_idフィールドが等しいとき、Idが等しくないときです。 – destroyer25t

答えて

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にないフィールドを含めることはできません。

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) 
関連する問題