2014-06-10 40 views
0

是否可以在MySQL查詢中使用WHERE IN和WHERE NOT IN?在同一查詢中使用WHERE IN和WHERE NOT

我曾嘗試在一個查詢中使用它們,但結果錯誤。所以我想問的是在理論上可以用NOT IN和IN語句排除一些結果嗎?

編輯1:我在同一列上使用語句。

+0

絕對有可能......你能向我們展示查詢嗎?請記住,你必須做'WH列IN(Something)和列NOT IN(Something)'和** NOT **'WHERE Column IN(Something)AND NOT NOT IN(Something)'(即,你必須指定列每一次,你都不能隱含地說你正在使用同一列) – Tom

回答

5

是的,這是完全可能的,但除非你使用它們有不同的列,它不會使有很大的意義,除非你不控制所涉及的臺。 如果您將它們用於不同的色譜柱,它可能非常合理。

例如,這是沒有意義的大多數時間:

WHERE A IN (1, 2, 3) AND A NOT IN (4, 5, 6) 

...因爲如果A1, 2, 3是,根據定義,而不是在4, 5, 6。第二部分是多餘的。只需

WHERE A IN (1, 2, 3) 

是你所需要的。但是你可以(例如,當你不知道該設置是什麼,你讓他們從其他來源):

WHERE A IN (1, 2, 3) AND A NOT IN (3, 4, 5) 

將歸結爲:

WHERE A IN (1, 2) 

但是,這是有意義的:

WHERE A IN (1, 2, 3) AND B NOT IN (4, 5, 6) 

(三振是因爲編輯到的問題。)

+1

是的,這是有道理的,絕對有效,我剛剛測試過。你猜對了我的情況「(例如,當你不知道集合是什麼時,你從其他來源獲得)」。這只是我查詢的一部分,但現在我知道什麼是錯的。謝謝T.J. Crowder –

+0

如果我有一個表有多行,列A具有相同數據,而B列不同,那麼會發生什麼?所以基本上它是一個多對多關係的數據透視表。我會舉一個例子。我有一張帶有視頻ID的桌子,每個視頻都有多個類別。當我使用上面的查詢,並且我想做WHERE category_id IN(1,2,3)和category_id NOT IN(3,4,5)時,我只排除了category_id = 3的那一行。但是,如果該視頻有另一個類別,它將進入我的結果集,這就是我不希望發生的事情。你可能有任何想法如何解決這個問題? –

+0

@happy_fist:我想你會想提出一個新的問題,給出關係的細節等,並提出這個問題。這聽起來像你*可能*希望'SELECT video_id FROM videoCategories WHERE category_id IN(1,2,3)AND video_id NOT IN(SELECT video_ID FROM videoCategories WHERE category_id IN(4,5,6))''' 2或者3,但是如果他們也有4,5或者6,但是它取決於很多**,你想要什麼樣的最終結果,表格是什麼樣的等等...... –

1

是的。例如:

SELECT * 
FROM someTable 
WHERE id IN (1,2,3,4) AND name NOT IN ('foo','bar','baz');