2013-02-01 67 views
2

我剛剛看了一個問題,這是eaxctly就是我一直在尋找: SO original questionSQlite3查詢:查找不屬於值列表的行。優化

讓我們考慮我有一個表「選項卡」具有列「上校」

表「選項卡」有這個數據 -

Col 
1 
2 
3 
4 
5 

如果我有一組值(2,3,6,7)。我可以查詢是 表中存在,並通過起訴查詢

Select Col from Tab where col IN (2,3,6,7) 

列表中的值,但是,如果我想在不在表目前 列表返回的值,即只(6 ,7)在這種情況下。我應該使用什麼查詢?

我發現了幾個解決方案,涉及創建一個臨時表,但最好的那裏找到了(至少更短,我想速度也更快)是SQL Server,並且在我看來不是根據需要爲SQLite3工作。

一個SQL Server 2008的方法

SELECT N FROM (VALUES(2),(3),(6),(7)) AS D (N) 
EXCEPT 
Select Col from Tab 

是有SQLite的3任何其他方式?

回答

1

在SQLite中,您可以使用SELECT而不使用FROM子句只返回一個固定記錄。 爲了得到多條記錄,結合那些UNION ALL(這是略快於UNION,因爲它沒有重複檢查):

SELECT 2 AS Col UNION ALL 
SELECT 3  UNION ALL 
SELECT 6  UNION ALL 
SELECT 7     
EXCEPT 
SELECT Col FROM Tab 
+0

這正是我一直在尋找。沒有考慮過UNION ALL。謝謝。 – jalone