2つの構造的に同一のテーブルがあり、table2はtable1を一括更新する際に使用される新しいデータのステージング地です。MySQLは2つのテーブルを比較し、同じプライマリキーを持ちますが他のフィールドのデータが異なる行を返します
table1でどの行が更新されるかを調べる必要があります。私は挿入される行と削除される行を無視したい。私は、更新された行に興味があります。主キーは同じままですが、行の他のフィールドの1つ以上には異なるデータが含まれています。
これまで私が一番近かったのは、次のとおりです。
SELECT table2.* FROM table2
INNER JOIN table1
ON table1.primarykey = table2.primarykey
WHERE table1.field1 != table2.field1
OR table1.field2 != table2.field2
OR table1.field3 != table2.field3
これは0行を返します。
EDIT:クエリが実際に動作します。データそのものに問題がありました。私はしばらくfacepalmに行くつもりです。
ありがとうございます。
フィールドをNULL可能にすることはできますか? –
コンラッドが取得しているので、nullはnullと等しくないので、比較の際に考慮する必要があります。書かれた方法では、データは「同じ」かもしれませんが、NULLがあれば等しくないと表示されますそこで。 – Poodlehat
また、それを可能にするストレージエンジンを使用している場合は、自動コミットをオフにして、更新プログラムを実行して変更内容を確認し、ロールバックしてください。 – Poodlehat