MariaDB 无法评估 SELECT 1 WHERE NULL = NULL;

MariaDB cannot evaluate SELECT 1 WHERE NULL = NULL;

我目前正在学习 SQL。我有一个我试图理解的书中的例子,但 MariaDB 无法评估它:

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;

有效。然而这不是:

SELECT 1 WHERE NULL = NULL;

我也试过添加括号,但这并没有多大帮助。我在这里做错了什么?这个例子是为了表明将 NULL 与任何其他值进行比较会得到 "Unknown".

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

请注意,该文档页面上的示例在列列表中有 NULL = NULL,而不是在 where 子句中,因为列列表将 return 比较的结果,而 where子句需要一个布尔表达式。

据我所知,如果没有 FROM,您将无法使用 WHERESELECT 1 WHERE 1 = 1 也不行。

要修复您的示例,您可以 select 来自虚拟 table:

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