sql >> データベース >  >> RDS >> Mysql

条件としてサブクエリを使用したMySQLDELETEFROM

    サブクエリの使用中にこの質問を削除しようとしている他の人のために、MySQLをアウトスマートにするためのこの例を残します(一部の人はそれができないと思っているようですが):

    DELETE e.*
    FROM tableE e
    WHERE id IN (SELECT id
                 FROM tableE
                 WHERE arg = 1 AND foo = 'bar');
    

    エラーが発生します:

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

    ただし、このクエリ:

    DELETE e.*
    FROM tableE e
    WHERE id IN (SELECT id
                 FROM (SELECT id
                       FROM tableE
                       WHERE arg = 1 AND foo = 'bar') x);
    

    正常に動作します:

    Query OK, 1 row affected (3.91 sec)
    

    サブクエリを追加のサブクエリ(ここではxという名前)でラップすると、MySQLはあなたが求めることを喜んで実行します。



    1. SQLServerにテーブルが存在するかどうかを確認します

    2. SQLServerデータベースTempDBの予期しない増大を検出して防止する方法

    3. 単一のMySQLデータベースへのリモートアクセスを許可する方法

    4. SQLServerでクラスター化インデックスまたは非クラスター化インデックスを使用する場合