7 Stimmen

Wie kann man =NULL in SQLite zum Laufen bringen?

Gegeben die folgende Tabelle:

Table: Comedians
=================

Id    First    Middle    Last
---  -------  --------  -------
 1     Bob      NULL     Sagat
 2    Jerry     Kal      Seinfeld      

Ich möchte die folgende vorbereitete Abfrage erstellen:

SELECT \* FROM Comedians WHERE Middle=?

für alle Fälle funktionieren. Es funktioniert derzeit nicht für den Fall, dass ich NULL über sqlite3_bind_null . Ich weiß, dass die Abfrage für die Suche nach NULL-Werten Folgendes verwendet IS NULL aber das würde bedeuten, dass ich die vorbereitete Abfrage nicht für alle Fälle verwenden kann. Ich müsste dann die Abfrage je nach Eingabe ändern, was den Zweck der vorbereiteten Abfrage weitgehend zunichte macht. Wie kann ich dies tun? Vielen Dank!

7voto

dan04 Punkte 82011

Sie können die IS Betreiber anstelle von = .

SELECT * FROM Comedians WHERE Middle IS ?

4voto

MatBailie Punkte 77040

Nichts stimmt überein = NULL . Die einzige Möglichkeit, dies zu überprüfen, ist mit IS NULL .

Sie können verschiedene Dinge tun, aber das Einfachste ist...

WHERE
  middle = ?
  OR (middle IS NULL and ? IS NULL)

Wenn es einen Wert gibt, von dem Sie wissen, dass er NIE erscheint, können Sie ihn ändern in...

WHERE
  COALESCE(middle, '-') = COALESCE(?, '-')

Aber Sie brauchen einen Wert, der buchstäblich NIEMALS erscheint. Außerdem wird dadurch die Verwendung von Indizes verschleiert, aber die OR Version kann oft auch schlecht sein (ich weiß nicht, wie gut SQLite damit umgeht).

Alles in allem empfehle ich die erste Version.

2voto

wallyk Punkte 55322

NULL ist kein Wert, sondern ein Attribut eines Feldes. Verwenden Sie stattdessen

SELECT * FROM Comedians WHERE Middle IS NULL

0voto

Preet Sangha Punkte 62622

Wenn Sie alles auf NULL abgleichen wollen

SELECT * FROM Comedians WHERE Middle=IfNull(?, Middle)

wenn keine Übereinstimmung auf NULL gewünscht wird

SELECT * FROM Comedians WHERE Middle=IfNull(?, 'DUMMY'+Middle)

Siehe diese Antwort: https://stackoverflow.com/a/799406/30225

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X