2012-03-28 92 views
1

檢測是否存在具有給定rowid的行是最佳/最正確/最快/最恰當的方法?SQLite:檢測rowid是否存在

或者通過擴展,hwo檢測是否至少有一行符合給定條件?

我解僱了一些這些請求。我目前使用

SELECT 1 FROM table WHERE condition LIMIT 1 

看起來有點怪我,但在我看來像「最少的工作」爲分貝,但是,我的SQL知識參差不齊。

回答

0

比如,你可以使用

SELECT COUNT(*) FROM table WHERE ID = whatever 
+0

你有更好'SELECT 1 FROM表WHERE ID = whatever'或者,如果SQLite支持它,'SELECT EXISTS(SELECT 1 FROM表WHERE id = whatever)'爲布爾結果。 – 2012-07-22 13:05:41

3

我可能會做這樣的事:

SELECT 
    CASE 
     WHEN EXISTS(SELECT NULL FROM table1 WHERE ID=someid) 
     THEN 1 
     ELSE 0 
    END 

Count行是不是有效。

要檢查,如果事情exists在大多數情況下更有效

+0

我不一定需要一個0/1,一個SELECT where sqlite3_step()返回DONE或ROW就足夠了。 - – peterchen 2012-03-28 13:46:15

1

使用EXISTS,這聽起來完美的你是什麼之後。例如

SELECT * 
FROM T1 
WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.X = T1.X AND T2.Y = 1) 

這是effectly一樣LIMIT 1但一般優化更好。

+0

什麼是T1和T2? – peterchen 2012-03-28 13:43:29

+0

Hypothetic Table名稱,X和Y是列名稱。這只是爲了演示'EXISTS'子句以及如何從'EXISTS'子查詢中引用外部表。 – GarethD 2012-03-28 13:49:13

0

一個可以測試

select true from table where id = id1 
1

由於它的源碼,你需要使用列名「ROWID」訪問ID列。使用克雷格林格SQL,SQLite的版本是這樣的:

SELECT EXISTS(SELECT 1 FROM table WHERE rowid = insert_number)