我有一个包含许多表的大型数据库。其中一些表可能包含email
字段。它们都是相同类型的varchar(255)。我希望能够做的是将所有表格与电子邮件列一起加入,并获取数据库中所有唯一电子邮件的列表。
我遇到的问题是该列有多个表,所以我需要它才能获得高性能。第二个问题是afaik,将表连接在一起意味着它们必须具有从第一个表到连接表的公共值。
我希望能够做到这样的事情:
SELECT
email
FROM
table_1
LEFT JOIN
table_2
USING (email)
LEFT JOIN
table_3
USING (email)
但是,我希望能够从所有表中获取所有电子邮件,无论它们是否存在于另一个表中。
在临时表中的所有表上进行联合选择并选择与此不同,会更快吗?
我需要能够在许多表(10+)上执行此操作,可能会有数千到数百万行。如果需要,我会将电子邮件列设置为INDEX。
由于
答案 0 :(得分:4)
如果您想要所有表格中的唯一电子邮件,包括仅在一个表格中显示的电子邮件,则应使用UNION
代替JOIN
SELECT DISTINCT email FROM table_a
UNION SELECT DISTINCT email FROM table_b
UNION SELECT DISTINCT email FROM table_c
...