2016-01-21 95 views
0

我有4个表,让它成为A,B,C & D.MySQL查询四个表

每个表都有一个共同的领域,让它成为电子邮件。

现在我想所有这是目前在任一B,C或d的但不是A.

回答

1

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

我能想到这样做是3个独立的查询的最佳方式,每个左侧的接合部,以表A.使用U形NION DISTINCT会给你从表中B,C,和d独特的电子邮件值不表A存在这里是我使用的查询:

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中的子查询是,他们不是很高性能。

+0

谢谢马克,它看起来不错。 –

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)