MySQL在公共列上加入多个表,没有重要性顺序

时间:2014-04-01 08:20:32

标签: mysql sql join inner-join

我有一个包含许多表的大型数据库。其中一些表可能包含email字段。它们都是相同类型的varchar(255)。我希望能够做的是将所有表格与电子邮件列一起加入,并获取数据库中所有唯一电子邮件的列表。

我遇到的问题是该列有多个表,所以我需要它才能获得高性能。第二个问题是afaik,将表连接在一起意味着它们必须具有从第一个表到连接表的公共值。

我希望能够做到这样的事情:

SELECT
    email
FROM
    table_1
LEFT JOIN
    table_2
USING (email)
LEFT JOIN
    table_3
USING (email)

但是,我希望能够从所有表中获取所有电子邮件,无论它们是否存在于另一个表中。

在临时表中的所有表上进行联合选择并选择与此不同,会更快吗?

我需要能够在许多表(10+)上执行此操作,可能会有数千到数百万行。如果需要,我会将电子邮件列设置为INDEX。

由于

1 个答案:

答案 0 :(得分:4)

如果您想要所有表格中的唯一电子邮件,包括仅在一个表格中显示的电子邮件,则应使用UNION代替JOIN

SELECT DISTINCT email FROM table_a
UNION SELECT DISTINCT email FROM table_b
UNION SELECT DISTINCT email FROM table_c
...