4

次のクエリを使用して、いくつかのエントリを削除しようとしています:

まず、次のクエリを使用して削除するエントリを見つけます。

SELECT guid FROM account GROUP BY guid,type HAVING count(type) > 1);

次に、このクエリを DELETE ステートメントに追加します。

DELETE FROM account WHERE guid IN (SELECT guid FROM account GROUP BY guid,type HAVING count(type) > 1);

しかし、私はこのエラーが発生します:

FROM 句で更新対象のテーブル 'アカウント' を指定することはできません

4

3 に答える 3

1

以下のように、必要に応じて一時テーブルを使用する必要があると思います。

  1. Step1: 一時テーブルを作成する

    CREATE TEMPORARY TABLE MyTemp
    SELECT guid FROM account 
    GROUP BY guid,type HAVING count(type) > 1;
    
  2. delete ステートメントで一時テーブルを使用する

    DELETE FROM account 
    WHERE guid IN (SELECT guid FROM MyTemp);
    
  3. 一時テーブルを削除する

    DROP TEMPORARY TABLE MyTemp;
    

編集: * 2 つのネストされたテーブルを使用した回避策も機能すると思います:

  DELETE FROM account 
    WHERE guid IN 
     (SELECT guid FROM 
       (SELECT guid FROM account 
       GROUP BY guid,type HAVING count(type) > 1) as MyTemp
    )
于 2012-11-28T16:56:05.647 に答える
0

あなたの問題は解決しました。次のようにしてください..

    DELETE FROM account 

      WHERE guid IN 

     (SELECT * FROM 

       (SELECT guid FROM account 

          GROUP BY guid,type 

          HAVING  count(type) > 1) AS a);
于 2013-12-02T11:20:37.773 に答える
-1

最初にビューを作成

create view view_acct as 
SELECT guid FROM account 
GROUP BY guid,type HAVING count(type) > 1;

使用後の様子

DELETE FROM account WHERE guid in (select * from view_acct);
于 2011-02-08T18:54:36.527 に答える