查询多个表以仅提取唯一结果

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

我已经在谷歌上搜索了一段时间,但没有找到解决方案。好的,我有两个表,如下所示: 表“主”:

客户邮箱 客户名称
[电子邮件受保护] 彼得潘
[电子邮件受保护] 保罗·史密斯

表“已注册”:

客户邮箱 客户名称
[电子邮件受保护] 詹姆斯·邦德
[电子邮件受保护] 保罗·史密斯

现在“main”表中的一些客户端将位于“registered”表中,但不是全部。此外,可能有一些客户端位于“已注册”表中,但不在“主”表中。最后,同一个客户端(电子邮件)可能会在主表中多次出现,但在表中只能注册一次。

现在我想做的是一个查询,从两个表和相应的名称中找到所有唯一的电子邮件(我不关心来自哪个表)。 我试过了:

SELECT client_email,client_name 
FROM `main` 
UNION 
SELECT client_email,client_name 
FROM `registered` 
ORDER BY client_email ASC;

但这会产生重复的电子邮件,因为它不仅查找唯一的电子邮件,而且查找电子邮件和客户名称都唯一的条目。因此,如果一个条目中的客户名称拼写稍有不同(例如,带有连字符或重音符号等),将导致该电子邮件被多次收集。我可以使用 GROUP BY(client_email) 让它在单个表上工作,但我不知道如何从 2 个或更多表中收集所有唯一的电子邮件。

mysql
1个回答
0
投票

也许包装您的查询和 group_concat 名称

DROP TABLE IF EXISTS main,registered;

create table main(client_email varchar(20), client_name varchar(20));
insert into main values
('[email protected]',   'Peter Pan'),
('[email protected]' ,   'Paul Smith'),
('aaa'  ,   'bbb');


create table registered(client_email varchar(20),   client_name varchar(20));
insert into registered values
('[email protected]',   'James Bond'),
('[email protected]' ,    'Paul Smith'),
('aaa'  ,   'ccc');

select client_email,group_concat(client_name)
from
(
SELECT client_email,client_name 
FROM `main` 
UNION 
SELECT client_email,client_name 
FROM `registered` 
) s
group by client_email;
© www.soinside.com 2019 - 2024. All rights reserved.