首页 > 解决方案 > 多个平台 ID 分配给电子邮件地址

问题描述

我面临的有趣问题。我有 5 个包含用户信息的公司表。我想做的是一个汇总表,其中包含与 5 家公司的电子邮件相关联的所有用户 ID。

即公司 1(id、email)、公司 2(id、email)、公司 3(id、email)。

理想情况下,希望表读取(电子邮件、c1_id、c2_id、c3_id)。

对如何获取所有不同的电子邮件然后是公司 ID 感到头疼。

标签: sqlunionamazon-redshift

解决方案


要以您喜欢的形式(电子邮件、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


推荐阅读