sql - 多个平台 ID 分配给电子邮件地址
问题描述
我面临的有趣问题。我有 5 个包含用户信息的公司表。我想做的是一个汇总表,其中包含与 5 家公司的电子邮件相关联的所有用户 ID。
即公司 1(id、email)、公司 2(id、email)、公司 3(id、email)。
理想情况下,希望表读取(电子邮件、c1_id、c2_id、c3_id)。
对如何获取所有不同的电子邮件然后是公司 ID 感到头疼。
解决方案
要以您喜欢的形式(电子邮件、c1_id、c2_id、c3_id...)获取数据,您需要LEFT JOIN
在电子邮件地址上的所有表中执行 a。LEFT JOIN
如果有一个没有出现电子邮件地址的公司表,则它必须是一个。如果您知道情况并非如此,那么您可以只使用JOIN
.
更新,因为其他公司数据库中可能有不在 company1 中的电子邮件,因此有必要首先生成电子邮件列表,然后生成JOIN
公司表:
SELECT e.email, c1.id AS c1_id, c2.id AS c2_id, c3.id AS c3_id, c4.id AS c4_id, c5.id AS c5_id
FROM (SELECT email FROM company1
UNION
SELECT email FROM company2
UNION
SELECT email FROM company3
UNION
SELECT email FROM company4
UNION
SELECT email FROM company5
) e
LEFT JOIN company1 c1 ON c1.email = e.email
LEFT JOIN company2 c2 ON c2.email = e.email
LEFT JOIN company3 c3 ON c3.email = e.email
LEFT JOIN company4 c4 ON c4.email = e.email
LEFT JOIN company5 c5 ON c5.email = e.email
ORDER BY e.email
我创建了一个小的SQLFiddle Demo
推荐阅读
- github - 访问 GitHub 私有仓库的信息
- graphics - 用于 LOD 的 Octree 中基于体素的 semless 网格
- swift - Swift:为什么 JSONDecoder (Codable/Decodable) 不调用结构的 init() 方法?
- python - 为什么`global`语句不影响当前块内的块?
- angular - 使用服务保存产品信息
- javascript - 错误:直方图
- angular - 可以根据角度条件进行路由吗?
- django - 负载平衡在单个硬件服务器上有意义吗?
- python - 我只想将名字 john 添加到垂直列表的末尾,但我不知道如何使用基本功能,请不要导入
- android - OutOfMemoryError:pthread_create 尝试发出 http 请求时