UNION
重複を削除するため、クエリ結果に重複はありません。重複を保持するには、UNION ALL
代わりに次を使用します。
SELECT b_email AS email FROM user WHERE status = 3 AND b_email != ''
UNION ALL SELECT c_email AS email FROM user WHERE status = 3 AND c_email != ''
...
重複しているメールアドレスを特定するには、次のようにします。
- クエリを変更して、重複を含むすべての電子メール アドレスのリストを返します(これは、
UNION ALL
代わりに を使用することを意味しますUNION
)
- メールアドレスでカウントする外側のクエリでラップする
- 外部クエリの結果を、カウントが 2 つ以上の電子メール アドレスに限定する
これを行う方法は次のとおりです(これは、投稿されたクエリが機能することを前提としています):
SELECT email, COUNT(*)
FROM (
SELECT b_email AS email FROM user WHERE status = 3 AND b_email != ''
UNION ALL SELECT c_email AS email FROM user WHERE status = 3 AND c_email != ''
UNION ALL SELECT user_email AS email FROM user WHERE status = 3 AND user_email != ''
UNION ALL SELECT user_email AS email FROM sub_user WHERE status = 3 AND user_email != ''
UNION ALL SELECT su_email AS email FROM sub_user WHERE status = 3 AND su_email != ''
) EmailGlom
GROUP BY email
HAVING COUNT(*) > 1
結果は、内部クエリで複数回表示されるすべての電子メール アドレスになります。