2016-03-25 10 views
0

Ich bin gerade dabei SQL zu lernen. Ich habe ein Beispiel aus einem Buch, das ich zu verstehen, ich versucht, aber MariaDB kann es nicht beurteilen:MariaDB kann nicht ausgewertet werden SELECT 1 WHERE NULL = NULL;

SELECT 1 
WHERE NULL = NULL 
UNION 
SELECT 0 
WHERE NULL <> NULL; 

Dies jedoch gibt den folgenden Fehler:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE NULL = NULL 
UNION 
SELECT 0 
WHERE NULL <> NULL;' at line 2 

ich versucht habe:

SELECT 1; 

was funktioniert. Allerdings nicht:

Ich habe auch versucht, Parantheses, aber das half nicht viel. Was mache ich hier falsch? Dieses Beispiel sollte zeigen, dass der Vergleich von NULL mit einem anderen Wert "Unbekannt" ergibt.

Antwort

2

AFAIK können Sie WHERE ohne FROM nicht verwenden. SELECT 1 WHERE 1 = 1 wird auch nicht funktionieren.

Ihrem Beispiel beheben Sie von einem Dummy-Tabelle auswählen können:

SELECT 1 
FROM (SELECT 'dummy_value') dummy_table 
WHERE NULL = NULL 
UNION 
SELECT 0 
FROM (SELECT 'dummy_value') dummy_table 
WHERE NULL <> NULL 

Aber besser zu sehen, wie MySQL könnte

SELECT 
    NULL = NULL, 
    NULL <> NULL, 
    NULL IS NULL, 
    NULL IS NOT NULL, 
    1 = NULL, 
    1 <> NULL, 
    1 IS NULL, 
    1 IS NOT NULL 
+1

Der _normal_ Weg zum Test auf Null ist 'col IS NULL' oder' col IS NOT NULL' –

+0

Dank @RickJames - das ist mehr SQL-Stil. Also habe ich es geändert. –

0

, die das erwartete Verhalten ist, nach the MariaDB docs on NULLs:

NULL values cannot be used with most comparison operators. For example, =, >, >=, <=, <, or != cannot be used, as any comparison with a NULL always returns a NULL value, never true (1) or false (0).

Beachten Sie, dass das Beispiel auf dieser docs Seite die NULL = NULL in der Spaltenliste hat, nicht in der where-Klausel, da die Spaltenliste das Ergebnis zurück des Vergleichs, und die Where-Klausel erfordert einen booleschen Ausdruck.

+0

SELECT NULL = NULL sein verhält; Das funktioniert wie ein Zauber. Wenn es der boolesche Ausdruck wäre, würde WHERE 1 = 1 funktionieren? – Melon

+0

Ich würde 'WHERE 1 = 1' erwarten zu arbeiten, ja. –

+1

'NULL' kann mit dem Operator '<=>' verglichen werden. –

Verwandte Themen