2012-03-28 16 views
1

Was ist die beste/richtige/schnellste/am besten geeignete Weise zu erkennen, ob eine Zeile mit einer gegebenen Rowid existiert?SQLite: Erkennen, ob eine Rowid existiert

Oder durch Erweiterung, hwo, um festzustellen, ob mindestens eine Zeile vorhanden ist, die einer bestimmten Bedingung entspricht?

Ich feuern einige dieser Anfragen. Ich bin derzeit

SELECT 1 FROM table WHERE condition LIMIT 1 

mir ein bisschen komisch aussieht, aber sieht aus wie „die am wenigsten Arbeit“ für die db mir aber meine SQL-Kenntnisse fleckige ist.

Antwort

0

Sie können zum Beispiel verwenden

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

Du bist besser dran mit SELECT 1 FROM Tabelle WHERE ID = whatever' oder, wenn SQLite unterstützt, 'SELECT EXISTS (SELECT 1 FROM Tabelle WHERE id = was auch immer) 'für ein boolesches Ergebnis. –

3

ich es wahrscheinlich so etwas tun würde:

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

Um Count die Zeilen nicht so wirksam ist.

Um zu überprüfen, ob etwas exists in den meisten Fällen wirksamer ist

+0

Ich brauche nicht unbedingt eine 0/1, eine SELECT Wobei sqlite3_step() gibt DONE oder ROW wäre genug. - – peterchen

1

Verwenden EXISTS, klingt es perfekt für das, was Sie nach. z.B.

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

Es ist effectly die gleiche wie LIMIT 1 aber ist in der Regel besser optimiert.

+0

Was sind T1 und T2? – peterchen

+0

Hypothetische Tabellennamen und X und Y sind Spaltennamen. Es war nur, um die 'EXISTS'-Klausel zu demonstrieren und wie man die äußere Tabelle aus der' EXISTS'-Unterabfrage referenzieren kann. – GarethD

0

One

select true from table where id = id1 
1

testen konnte Da es SQLite ist, müssen Sie die Spaltennamen "Rowid" verwenden, die id-Spalte zuzugreifen. Mit Craig Ringer-SQL, würde die SQLite-Version wie folgt aussehen:

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