2012-03-28 52 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)