0

テーブルから重複する列がある行を削除する必要がありlinkます。私は実行しようとしています:

delete from resultitem 
       where id in (select r.id 
                    from resultitem r 
                    group by r.link
                    having count(r.id) >1);

しかし、エラーが発生します:

ERROR 1093 (HY000): You can't specify target table 'resultitem' for update in FROM clause

一時テーブルなしで MySQL のサブクエリによって行を削除することは可能ですか? お知らせ下さい。

4

4 に答える 4

4

これにより、最も低いものを除くすべてが削除されidますlink:

delete  ri1
from    resultitem as ri1
inner join
        resultitem as ri2
on      ri1.link = ri2.link
        and ri1.id > ri2.id

SQL Fiddle での実例。

すべての重複リンクを削除し、重複を残さないようにするには、and ri1.id > ri2.id.

于 2012-09-12T08:40:04.280 に答える
1
DELETE resultitem
FROM resultitem
LEFT OUTER JOIN (
   SELECT MIN(id) as RowId, link
   FROM resultitem
   GROUP BY link
) as KeepRows ON
   resultitem.id = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL
于 2012-09-12T08:46:54.113 に答える
0

これを試してみてください...

delete r from resultitem r
INNER JOIN (
       (select id 
                    from resultitem rr 
                    group by rr.link
                    having count(rr.id) >1) rr
ON r.id = rr.id;
于 2012-09-12T08:41:00.033 に答える
0
delete from resultitem 
       where id not in (select r.id  
                  from (select r1.id, unique(r1.link) from resultitem r1) as r );
于 2012-09-12T08:47:15.020 に答える