MySQLは実際には正式なOUTER JOIN
オペレーションをサポートしていませんが、2つのジョインの和集合を使用して1つをシミュレートできます。
SELECT t1.*, 'table one' AS missing
FROM table_old t1
LEFT JOIN table_new t2
ON t1.name = t2.name AND
t1.surname = t2.surname AND
t1.birthdate = t2.birthdate AND
t1.birthplace = t2.birthplace
WHERE t2.name IS NULL
UNION ALL
SELECT t2.*, 'table two'
FROM table_old t1
RIGHT JOIN table_new t2
ON t1.name = t2.name AND
t1.surname = t2.surname AND
t1.birthdate = t2.birthdate AND
t1.birthplace = t2.birthplace
WHERE t1.name IS NULL;
私の基準を主張するために、レコードが古くなっているフィールドのいずれかが一致しないということであること:他のテーブルでは何にも一致していない両方のテーブルからレコードを含めるように完全外部結合を使用。つまり、3つのフィールドが一致しても一致しない場合は、一致としてカウントしません。
実行中のデモについては、以下のリンクをクリックしてください。あなたは私の答えを洗練し、論理的に同じであるペアのグループを簡単にまとめることができるかもしれませんが、それはより多くの作業を必要とします。
古いかまたは両方に、新しいものではないではない新しいに古いのレコードを見つけるために欠けていますか?さらに、左結合は妥当と思われます。あなたは1つを試しましたか? – xQbert
私は、idsカラムが一致しないので、join述語が作成するのが難しく、他のカラムの値は時間とともに変化すると思います。要するに、結合基準は意味をなさないでしょう。 – cdaiga
両方を見つける必要がありますが、私が古いものではなく、新しいものを見つけるのは簡単です。 – Pier67