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

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

    問題は、MySQLが、なんらかの理由で、次のようなクエリを記述できないことです。

    UPDATE myTable
    SET myTable.A =
    (
        SELECT B
        FROM myTable
        INNER JOIN ...
    )
    

    つまり、UPDATEを実行している場合 / INSERT / DELETE テーブルでは、内部クエリでそのテーブルを参照することはできませんできます ただし、その外部テーブルのフィールドを参照してください...)

    解決策は、myTableのインスタンスを置き換えることです (SELECT * FROM myTable)を使用したサブクエリで 、このように

    UPDATE myTable
    SET myTable.A =
    (
        SELECT B
        FROM (SELECT * FROM myTable) AS something
        INNER JOIN ...
    )
    

    これにより、必要なフィールドが暗黙的に一時テーブルにコピーされるため、許可されます。

    この解決策を見つけましたここ 。その記事からのメモ:

    SELECT * FROM tableだけでは不十分です。 実生活でのサブクエリ。例を単純にしておきたかっただけです。実際には、その最も内側のクエリで必要な列のみを選択し、適切なWHEREを追加する必要があります。 結果を制限する句もあります。



    1. Oracleによるページング

    2. SQLServerでのメモリ設定の重要性を理解する

    3. PostgreSQLでタイムスタンプを自動的に更新するにはどうすればよいですか?

    4. コマンドラインからcsvをmysqlにインポートする