MySQL - 複数テーブルを連結して重複を削除しつつ、特定テーブルに存在するデータを削除する
複数テーブルの連結
unionを使うと連結できます。
特定テーブルに存在するデータの削除
- 特定テーブルを
left joinしたときに、特定テーブルの該当カラムに値があれば、特定テーブルに同じデータが存在するということになります。 - ですので、
left joinしつつ、特定テーブルの該当カラムがnullなデータ探します。 - 下記の場合、
tmp.emailと同じデータをtable4が持っている場合、left joinの結果、table4.emailにも、tmp.emailと同じ値が入ります。逆に、table4が持っていない場合、table4.emailはnullになります。
select concat(tmp.name1, " ", tmp.name2) as name, tmp.email from ( (select name1, name2, trim(email) as email from table1) union (select name1, name2, trim(email) as email from table2) union (select name1, name2, trim(email) as email from table3)) as tmpleft join table4 on tmp.email = table4.emailwhere table4.email is nulland tmp.email regexp '^[^@]+@[^@]+\.[^@]{2,}$'group by tmp.emailorder by tmp.email asc;