检查MySQL数据库中是否有重复项

问题描述 投票:0回答:1

我目前有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
mysql
1个回答
1
投票

对于这种情况,我认为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     |
© www.soinside.com 2019 - 2024. All rights reserved.