我有4张桌子,让它成为A,B,C& d。
这些表中的每一个都有一个共同的字段,让它成为电子邮件。
现在,我希望所有的电子邮件都出现在B,C或D中,但不包含在A中。
答案 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)