我已经在 Google 上搜索了一段时间,但没有找到解决方案。好的,我有 2 个如下所示的表:表“main”:
表“已注册”:
现在,表中“main”中的部分客户将出现在表中“registered”,但不是全部。此外,可能有些客户出现在表中“registered”,但不出现在表中“main”。最后,同一个客户(电子邮件)可能多次出现在表中,但只出现在表中一次。
现在我想要做的是查询两个表中所有唯一的电子邮件和相应的名称(我不关心来自哪个表)。我试过:
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 个或更多表中收集所有唯一的电子邮件。
期望结果。基于上面的示例数据,我希望得到以下查询结果:
| client_email | client_name |
| ------------ | -------------- |
| [email protected]| Peter Pan |
| [email protected]| James Bond |
| [email protected] | Paul Smith |
您可以按客户端电子邮件分组并取任意客户端名称(如果有多个客户端拥有此电子邮件)。
可能使用 UNION ... 子查询的片段多次,您有多少个表。
查看示例
如果您可以看到电子邮件的 client_name 重复,请添加列 count( )。并且对于过滤器重复,使用 HAVING count()>1。
也许包装您的查询和group_concat名称https://dbfiddle.uk/DSWlTERj
子查询将对电子邮件和姓名进行重复数据删除,外部查询将列出与电子邮件相关的所有姓名。