我正面临的有趣问题。我有5个包含用户信息的公司表。我想要做的是一个汇总表,其中包含与5家公司的电子邮件相关联的所有用户ID。
即公司1(身份证,电子邮件),公司2(身份证,电子邮件),公司3(身份证,电子邮件)。
理想情况下,希望表读取(email,c1_id,c2_id,c3_id)。
抓住我的头脑,了解如何获得所有公司身份的不同电子邮件。
要以您希望的形式(电子邮件,c1_id,c2_id,c3_id,...)获取数据,您需要在电子邮件地址的所有表格中执行LEFT JOIN
。如果公司表中没有出现电子邮件地址,则需要成为LEFT JOIN
。如果您知道情况并非如此,那么您可以使用JOIN
。
更新,因为在公司1中的其他公司数据库中可能有电子邮件,有必要首先生成电子邮件列表,然后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
GROUP BY
使用电子邮件然后只使用STRAGG(company_id)
SELECT email, STRAGG(company_id)
FROM table_name
GROUP BY email