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".
,这是预期的行为
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
,您将无法使用 WHERE
。 SELECT 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
我目前正在学习 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".
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
,您将无法使用 WHERE
。 SELECT 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