首页 > 解决方案 > 如何根据 MySQL 中的多个列从多个表中获取唯一记录?

问题描述

我有 3 张桌子:

contacts1

id  name    email
1   sachin  sachin@gmail.com
2   amit    sachin@gmail.com
2   rahul   rahul@yahoo.com

contacts2

id  name    email
1   neha    neha@gmail.com
2   sachin  sachin@gmail.com
3   mukesh  mukesh@yahoo.com

contacts3 

id  name        email
1   pooja       pooja@gmail.com
2   mukeshkumar mukesh@yahoo.com
3   amit        amit@gmail.com

我想从这 3 个表中获取唯一记录(EMAIL COLUMN)。我UNION用作

SELECT `name`, `email` FROM `contacts1` WHERE `email` != '' 
UNION 
SELECT `name`, `email` FROM `contacts2` WHERE `email` != '' 
UNION 
SELECT `name`, `email` FROM `contacts3` WHERE `email` != '' 

输出

在此处输入图像描述

结果集中的两条记录具有相同的电子邮件 ID(红十字标记)。我想排除它们,只得到它们的第一次出现。我尝试DISTINCTemail字段,但它给了我一个错误。我们怎么能做到这一点?

我想实现这个

在此处输入图像描述

标签: mysql

解决方案


尝试使用带有 group by 的子查询,如下所示:

SELECT M.* FROM (
    SELECT `name`, `email` FROM `contacts1` WHERE `email` != '' 
    UNION 
    SELECT `name`, `email` FROM `contacts2` WHERE `email` != '' 
    UNION 
    SELECT `name`, `email` FROM `contacts3` WHERE `email` != '' 
) AS M
GROUP BY M.`email`

推荐阅读