2013-04-23 35 views
2
SELECT Id, Name, Lastname 
FROM customers AS c, Places AS p, 
WHERE c.customer_ID = p.customer_ID 

我的問題是,我想阻止顯示一排中存在的另一個表查詢(階段)從表中選擇當列的值沒有在另一個表中存在

+0

遺憾的標題,我想說是否存在 – 2013-04-23 21:50:48

+1

二者必選其一的'IF NOT EXISTS()'建造或'LEFT將其他表加入您的on子句WHERE其他表中的某個不可爲空的列IS NULL。 – Wrikken 2013-04-23 21:53:27

+0

ANSI-89加入FTL。 – 2013-04-23 21:54:31

回答

5

你可以做一個LEFT JOIN和檢查空。

SELECT Id, Name, Lastname 
FROM customers AS c LEFT JOIN Places AS p ON c.customer_ID = p.customer_ID 
WHERE p.customer_ID IS NULL 
+0

上帝保佑你! – 2013-04-23 22:15:02

0

結果您可以使用:

SELECT Id, Name, Lastname 
FROM customers AS c JOIN Places AS p USING(customer_ID) 

這是用in/exists可以更快的方式。

+0

MySQL是否支持using關鍵字? – 2013-04-23 21:54:25

+0

你的意思是什麼關鍵字? – Jack 2013-04-23 22:00:16

1

添加

and not exists 
(subquery to select your exclusions) 

到您的查詢

+0

非常感謝你,這是非常有用的 – 2013-04-23 21:55:43

+0

嘿又!對不起,我是一個新人。結果是相反的,我想阻止顯示該行的查詢結果,如果存在其他表。 – 2013-04-23 22:07:00

0

我想你想是這樣的:

SELECT Id, Name, Lastname FROM customers, WHERE customer_ID NOT IN (SELECT customer_ID FROM Places)

+1

對於大型數據集,不是非常慢。 – 2013-04-23 21:57:06

+0

你說得對。再想一想,很明顯不存在必須更快。當發現一條記錄時它可以停止,而我的應該檢查NOT IN(...)部分中的所有記錄。 – 2013-04-23 22:00:39

相關問題