2015-06-17 11 views
7

Gibt es einen Wert, den ich in einer SQL IN-Klausel platzieren kann, die garantiert, dass die Klausel zu false ausgewertet wird?SQL IN-Klausel, die garantiert zu false auswerten

SELECT * 
FROM Products 
WHERE ProductID IN (???) 

Gibt es etwas, was ich ersetzen könnte ??? mit, um sicherzustellen, dass keine Zeilen zurückgegeben werden?

+0

Welcher Datentyp ist ProductID? – Matt

+0

Ein numerischer Wert, aber keine Ganzzahl, 1.23? – jarlh

+0

@Matt Angenommen, es ist ein Int –

Antwort

11

Durch NULL ersetzen. Es gibt keine bessere Garantie!

Da kein anderer Wert NULL, auch NULL selbst entsprechen kann.

Und das ist ein irgendwie universeller Wert für jeden Typ (wie @ zohar-peled erwähnt).

+0

hatte den gleichen Gedanken. Beat mich dazu :) + 1 – ughai

+1

Beat mich dazu! 'IN (NULL)' wird nie übereinstimmen, nicht einmal zu 'NULL' –

+0

1 Sekunde schneller als ich :-) –

-1

Geben Sie zunächst eine ungültige ProductID ein, z. -1.

SELECT * 
FROM Products 
WHERE ProductID IN (-1) 
0

Verwenden NULL

SELECT * 
FROM Products 
WHERE ProductID IN (NULL) 

Da dies wird wieder nichts

-1

Versuchen

SELECT * 
FROM Products 
WHERE ProductID IN (0) 

Ich bin mir ziemlich sicher, dass Sie Produkt mit ID = 0

`t anziehen

Das wird zurückkehren falsch.

-1
SELECT * 
FROM Products 
WHERE ProductID IN (SELECT '') 

Eine andere Möglichkeit.

+0

'SELECT ''' wird implizit in '0' umgewandelt, was ich nicht akzeptieren kann. –

+0

Vielen Dank für Ihr Feedback. – DNac