BigQuery/SQL:如果值为NULL,则(value != 'some string') returns false
BigQuery/SQL: If value is NULL, then (value != 'some string') returns false
此查询 return 只有第一行。但是NULL
不等于"anything"
,为什么会是returnFALSE
呢?这是某种错误吗?这个逻辑似乎违反直觉。
WITH sample AS (
SELECT 'something' AS key
UNION ALL
SELECT NULL AS key
)
SELECT * FROM sample WHERE key != 'anything'
当您使用 Null
Value 然后使用 ISNULL
进行设置。这不是错误。
WITH sample AS (
SELECT 'something' AS [key]
UNION ALL
SELECT NULL AS [key]
)
SELECT * FROM sample WHERE ISNULL([key],'') != 'anything'
除非另有说明,所有运算符return当其中一个操作数为NULL时为NULL
所以,NULL != 'string'
returns NULL
,这显然不是 TRUE
(也不是 FALSE
),因此被排除在输出
大家自己看,通过运行
SELECT *, key != 'anything'
FROM sample
这就是为什么你应该使用 IFNULL(key, '') != 'anything'
你可以通过运行
看到不同
SELECT *, key != 'anything', ifnull(key, '') != 'anything'
FROM sample
P.S。您可以查看有关 BigQuery 的更多信息 Operators
What's the benefit of having this kind of logic? Why NULL != 'anything' is not TRUE?
SQL 空值基本上意味着“可以是任何东西”。因此无法判断与 null 的比较是真还是假。这个逻辑是核心 SQL 的一个组成部分,几乎每个 SQL 数据库
都遵循它
将 null 视为一个 missed/absent 数据,其值可以是任何值,因此比较(或其他操作)的结果是未知的,这就是 null
此查询 return 只有第一行。但是NULL
不等于"anything"
,为什么会是returnFALSE
呢?这是某种错误吗?这个逻辑似乎违反直觉。
WITH sample AS (
SELECT 'something' AS key
UNION ALL
SELECT NULL AS key
)
SELECT * FROM sample WHERE key != 'anything'
当您使用 Null
Value 然后使用 ISNULL
进行设置。这不是错误。
WITH sample AS (
SELECT 'something' AS [key]
UNION ALL
SELECT NULL AS [key]
)
SELECT * FROM sample WHERE ISNULL([key],'') != 'anything'
除非另有说明,所有运算符return当其中一个操作数为NULL时为NULL
所以,NULL != 'string'
returns NULL
,这显然不是 TRUE
(也不是 FALSE
),因此被排除在输出
大家自己看,通过运行
SELECT *, key != 'anything'
FROM sample
这就是为什么你应该使用 IFNULL(key, '') != 'anything'
你可以通过运行
看到不同SELECT *, key != 'anything', ifnull(key, '') != 'anything'
FROM sample
P.S。您可以查看有关 BigQuery 的更多信息 Operators
What's the benefit of having this kind of logic? Why NULL != 'anything' is not TRUE?
SQL 空值基本上意味着“可以是任何东西”。因此无法判断与 null 的比较是真还是假。这个逻辑是核心 SQL 的一个组成部分,几乎每个 SQL 数据库
都遵循它将 null 视为一个 missed/absent 数据,其值可以是任何值,因此比较(或其他操作)的结果是未知的,这就是 null