2012-03-28 17 views
1

与えられたROWIDを持つ行が存在するかどうかを検出する最も良い方法/最速方法/最も適切な方法は何ですか?SQLite:ROWIDが存在するかどうかを検出する

特定の条件に一致する行が少なくとも1つ存在するかどうかを検出するには、

私はこれらの要求のかなりの部分を発砲しています。私は現在、

SELECT 1 FROM table WHERE condition LIMIT 1 

私には少し奇妙に見えますが、しかし、私のSQLの知識がむらで、DBの「少なくとも仕事」のように私には見えますを使用しています。

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

Countに行がその効果的ではありません。

答えて

0

あなたは、例えば、このような私はそれを行うだろうだろう

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

あなたが持つ方がいいでしょう 'WHERE ID = whatever'やSQLiteのは、それをサポートしている場合、' SELECTはEXISTS(FROMテーブル1を選択するには、表から1を選択しますWHERE id = whatever) 'を返します。 –

3

何かを使用することができます。

何かexistsは、ほとんどの場合、より効果的である場合

+0

必ずしも0/1、SELECTは必要ありません。sqlite3_step()はDONEまたはROWを返します。 - – peterchen

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

+0

仮説テーブル名、およびXとYは列名です。 'EXISTS'句と、' EXISTS'サブクエリの中から外部テーブルを参照する方法を説明するだけでした。 – GarethD

0

一つは

select true from table where id = id1 
1

をテストすることができ、それはsqliteのだので、あなたは、そのID列にアクセスするために、列名「ROWID」を使用する必要があります。クレイグリンゲルSQLを使用して、SQLiteバージョンは次のようになります。

SELECT EXISTS(SELECT 1 FROM table WHERE rowid = insert_number)  
関連する問題