2014-02-07 104 views
0

中的不存在的記錄其實我有一個值列表,我只想知道那些不存在於特定表中的值。用'IN'搜索記錄並顯示錶

表'球'的顏色值爲綠色和紅色。

特查詢到的註冊值返回是:

Select * from ball where colors in ('green', 'red', 'blue', 'gray') 

在這種情況下,我需要返回藍色和灰色。

快速編輯:我有5k +結果做比較這種方式。

回答

2

你需要使用UNION:

SELECT colors FROM 
(select 'green'as colors 
    union 
    select 'red' 
    union 
    select 'blue' 
    union 
    select 'gray') all_colors 
WHERE NOT EXISTS (SELECT ball.colors FROM ball WHERE ball.colors = all_colors.colors) 

或者,如果你有一些(或能使人),其中包含所有的顏色,你可以跳過聯盟和剛使用該表。

+0

不錯!由於我有5k +的值,所以有更簡單的方法嗎? –

+1

不與MySQL不存在。我強烈建議你將它們導入某種表格中...... – PinnyM

+0

@ Dan-SP,你的意思是5k顏色來檢查你的球檯嗎? – Andrew

0

假設你有一個存儲所有可用的球色表,你可以做到這一點,像這樣:

SELECT all_colors.color 
FROM all_colors LEFT JOIN balls ON balls.color = all_colors.color 
WHERE balls.color IS NULL 

你還可以創建在每個表中的列color進一步加快速度吧指標。

一些閱讀左外連接:http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join

+0

我沒有這張表的顏色.. –

+0

一般來說,在某種情況下'NOT EXISTS'會比'LEFT JOIN'表現更好喜歡這個。 YMMV ... – PinnyM

+0

@PinnyM好吧,它似乎是依賴於引擎。無論如何,根據[這個答案](http://stackoverflow.com/a/2246793/512334),MySQL似乎更喜歡'LEFT JOIN'。但我同意,YMMV。 – Manny