2016-01-21 37 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)