2016-03-25 15 views
0

私は現在SQLを学んでいます。私は私が理解しようとしている本からの例がありますが、MariaDBは、それを評価することはできません。しかしこれは、次のエラー与えMariaDBはSELECT 1 WHERE NULL = NULLを評価できません。

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

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 

を私が試してみました:

SELECT 1; 

これは機能します。しかし、これはしません:

私もparanthesesを追加しようとしましたが、それほど助けにはなりませんでした。私はここで間違って何をしていますか?この例は、NULLを他の値と比較すると「不明」となることを示しています。

答えて

2

AFAIK WHEREFROMなしでは使用できません。 SELECT 1 WHERE 1 = 1も機能しません。あなたはダミーのテーブルから選択することができ、あなたの例を修正するには

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

しかし、MySQLは

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

nullをテストする_normal_方法は 'col IS NULL'または' col IS NOT NULL'です –

+0

Thanks @RickJames - これはもっとSQLスタイルです。だから私はそれを変更しました。 –

0

the MariaDB docs on NULLsによると、予想される動作です:列リストが結果を返しますので、そのドキュメントページ上の例では、列リストではなく、WHERE句でNULL = NULLを持っていることを

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).

お知らせ比較のwhere節にはブール式が必要です。

+0

SELECT NULL = NULL可能性がどのように動作するかを確認する良い方法。これは魅力のように機能します。ブール式の場合は、WHERE 1 = 1となるでしょうか? – Melon

+0

私は 'WHERE 1 = 1'がうまくいくと思っています。 –

+1

'NULL 'は' <=> '演算子と比較できます。 –