複数テーブルの連結
特定テーブルに存在するデータの削除
- 特定テーブルを
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 tmp
left join table4 on tmp.email = table4.email
where table4.email is null
and tmp.email regexp '^[^@]+@[^@]+\.[^@]{2,}$'
group by tmp.email
order by tmp.email asc;