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

このMySQLアップデートが機能しないのはなぜですか?

    テーブルを変更してサブクエリで同じテーブルから選択できないため、クエリは失敗します。

    サブクエリ構文 を参照してください。

    JOINのトリックでこれを回避できると思います:

    UPDATE meterreadings AS tgt
    INNER JOIN (
      SELECT * FROM meterreadings
      WHERE meterreadingtype_id = 2
      ) AS src
    ON tgt.meterreadingdate = src.meterreadingdate
       AND tgt.location_id = src.location_id
       AND tgt.created = src.created
       AND tgt.asset_id = src.asset_id
    SET tgt.meterreading = src.meterreading
    

    私はMySQLの専門家ではありませんが、MySQLが最初にサブクエリを処理し、その結果を一時テーブルとしてメモリに保存するため、これは機能すると思います。このテーブルはUPDATE中に変更されません。これの副作用は、サブクエリの結果が大きい場合、大量のメモリをかみ砕く(または使い果たす)ことです。

    (私が知る限り)メモリの問題を回避する唯一の方法は、更新ターゲットに直接関係しない基準を使用してサブクエリを削減することです。たとえば、夜間のプロセスの一部としてこれらの更新を行う場合は、内部SELECTが過去24時間以内に作成された行のみを返すようにします。




    1. テーブル、フィールド、スキーマ名を使用して、参照されているテーブル名を検索します

    2. PDO::FETCH_ASSOCがすべてをフェッチしていない

    3. phpとjqueryのロケーションファインダースクリプトを使用したインドのピンコードデータベース

    4. MYSQLインジェクションからの良い予防?