私は2つのテーブルを持っています:
SELECT
d.id,
d.permission_lookup_id,
d.permission_object_id,
f.id,
f.permission_lookup_id,
f.permission_object_id
FROM
folders f
LEFT JOIN
documents d
ON f.id = d.folder_id
WHERE
d.permission_lookup_id != f.permission_lookup_id OR
d.permission_object_id != f.permission_object_id
理論的には、すべてが順調であれば何も返さないはずですが、そうではありません。何十万もの結果 (現在は 407,343) を受け取ります。外部キー制約としてに基づいて、と同様に と一致documents
するようにテーブルを更新する必要があります。permission_lookup_id
folders
permission_lookup_id
permission_object_id
documents.parent_id
次のクエリを試しましたが、ほとんど成功しませんでした。
UPDATE
folders f
LEFT JOIN
documents d
ON f.id = d.folder_id
SET
d.permission_lookup_id = f.permission_lookup_id,
d.permission_object_id = f.permission_object_id
WHERE
d.permission_lookup_id != f.permission_lookup_id OR
d.permission_object_id != f.permission_object_id
実行後、70,986 行が影響を受け、407343 行が一致したことがわかりましたが、最初の選択クエリの結果がまだ残っています。
編集: 次のクエリはどちらも 0 行を返します。
SELECT * FROM folders WHERE permission_lookup_id IS NULL OR permission_object_id IS NULL;
SELECT * FROM documents WHERE permission_lookup_id IS NULL OR permission_object_id IS NULL;
空白の値についても同様です。
編集 2: 元の選択/更新クエリでアマチュアの間違いがありました。WHERE 句には、次のものがありました。
WHERE
d.permission_lookup_id != f.permission_lookup_id OR
d.permission_object_id != f.permission_lookup_id
私が持っていたはずの場所
WHERE
d.permission_lookup_id != f.permission_lookup_id OR
d.permission_object_id != f.permission_object_id
それが原因で誤検知が発生しましたが、必要かどうかに関係なく、更新を実行してすべての列を更新するだけでした。混乱させて申し訳ありません。