我目前有3个不同的查询来检查数据库中的多个用户,我想知道是否有一种方法可以在单个查询中组合所有内容。
基于电子邮件:
SELECT
user_email,
COUNT(user_email)
FROM
users
GROUP BY user_email
HAVING COUNT(user_email) > 1;
基于姓氏:
SELECT
user_lastname,
COUNT(user_lastname)
FROM
users
GROUP BY user_lastname
HAVING COUNT(user_lastname) > 1;
基于电话:
SELECT
user_phone,
COUNT(user_phone)
FROM
users
GROUP BY user_phone
HAVING COUNT(user_phone) > 1;
对于每个查询,我都显示一个电子邮件|姓氏|电话号码列表以及其中有多个用户的数量。我的最终计划是制作一个列表,其中仅包含重复的用户,仅包含他们捕获的信息(例如,基于U电子邮件的X / Y用户重复)。
User_ID | user_email | user_firstname | user_lastname | user_phone
1 | [email protected] | John | Snow | 123456
2 | [email protected] | George | Smith | 546632
3 | [email protected] | Maria | Coal | 553211
4 | [email protected] | Jack | Black | 752210
5 | [email protected] | Tom | Bing | 856332
6 | [email protected] | Storm | Snow | 325412
7 | [email protected] | Mairy | Call | 123456
8 | [email protected] | Kim | Loren | 351200
9 | [email protected] | Dot | Honey | 546632
10 | [email protected] | Jack | Smithson | 455871
最终结果必须显示用户1 + 4(相同的电子邮件)+7(相同的电话号码和1)+6(相同的姓氏和电话1)+ 2 + 9(相同的电话号码)
User_ID | user_email | user_firstname | user_lastname | user_phone
1 | [email protected] | John | Snow | 123456
4 | [email protected] | Jack | Black | 752210
6 | [email protected] | Storm | Snow | 325412
7 | [email protected] | Mairy | Call | 123456
2 | [email protected] | George | Smith | 546632
9 | [email protected] | Dot | Honey | 546632
对于这种情况,我认为EXISTS是最佳解决方案:
select u.* from users u
where exists (
select 1 from users
where user_id <> u.user_id
and (user_lastname = u.user_lastname or user_email = u.user_email or user_phone = u.user_phone)
)
请参见demo。结果:
| User_ID | user_email | user_firstname | user_lastname | user_phone |
| ------- | -------------- | -------------- | ------------- | ---------- |
| 1 | [email protected] | John | Snow | 123456 |
| 2 | [email protected] | George | Smith | 546632 |
| 4 | [email protected] | Jack | Black | 752210 |
| 6 | [email protected] | Storm | Snow | 325412 |
| 7 | [email protected] | Mairy | Call | 123456 |
| 9 | [email protected] | Dot | Honey | 546632 |