MySQL查询四个表

时间:2016-01-21 14:13:17

标签: mysql

我有4张桌子,让它成为A,B,C& d。

这些表中的每一个都有一个共同的字段,让它成为电子邮件。

现在,我希望所有的电子邮件都出现在B,C或D中,但不包含在A中。

2 个答案:

答案 0 :(得分:1)

看看这个小提琴:http://sqlfiddle.com/#!9/f35dc/1

我能想到这样做的最好方法是使用3个单独的查询,每个查询都连接到表A.使用UNION DISTINCT将为表A中不存在的表B,C和D提供唯一的电子邮件值这是我使用的查询:

SELECT
b.email
FROM
b
LEFT JOIN a ON b.email = a.email
WHERE a.email IS NULL
UNION DISTINCT
SELECT
c.email
FROM
c
LEFT JOIN a ON c.email = a.email
WHERE a.email IS NULL
UNION DISTINCT
SELECT
d.email
FROM
d
LEFT JOIN a ON d.email = a.email
WHERE a.email IS NULL

另一个答案建议使用子选择,但我对mySQL中的子选择的经验是它们不是非常高效。

答案 1 :(得分:0)

如果您想要重复发送电子邮件,可以使用union all;如果您不想重复发送电子邮件,则可以使用union,并not in喜欢此查询:

select email from B
union select email from C
union select email from D
where email not in (SELECT email FROM A)