2017-11-03 22 views
1

を見つけるために参加します。両方ともテーブル間で一致しないid列があります。いくつかのレコードはテーブル間で時間の経過とともに変更されています。そして、テーブル間で変更(追加または削除)されたレコードを持つ3番目のテーブルが必要になります。左は私は2つのmysqlのテーブルを持って異なるIDを持つ2つのテーブル間の差

だから私はnamesurnamebirthdatebirthplaceとテーブルを比較する必要があります。

私は左結合を使用する必要があると思いますが、私は文法を理解していません。どんな助け?

+0

古いかまたは両方に、新しいものではないではない新しいに古いのレコードを見つけるために欠けていますか?さらに、左結合は妥当と思われます。あなたは1つを試しましたか? – xQbert

+0

私は、idsカラムが一致しないので、join述語が作成するのが難しく、他のカラムの値は時間とともに変化すると思います。要するに、結合基準は意味をなさないでしょう。 – cdaiga

+0

両方を見つける必要がありますが、私が古いものではなく、新しいものを見つけるのは簡単です。 – Pier67

答えて

3

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つのフィールドが一致しても一致しない場合は、一致としてカウントしません。

実行中のデモについては、以下のリンクをクリックしてください。あなたは私の答えを洗練し、論理的に同じであるペアのグループを簡単にまとめることができるかもしれませんが、それはより多くの作業を必要とします。

Demo

+0

@xQbertあなたが正しいです、そして、私はそれをテストしたはずです。いずれにせよ、今質問にデモを追加しました。 –

関連する問題