-1

我有一个表,我们有一个 char 类型的列“column_name”(大小 6)。我写了如下查询

select * from table_name where column_name != "String"

我希望得到表中的元组,它的值不是列'column_name'的'String',包括列'column_name'的值为NULL的元组。但是这个查询没有返回列 'column_name' 的 NULL 值的元组。你能帮我理解为什么会这样吗?如果我还想为列 'column_name' 设置具有 NULL 值的元组,我的查询应该是这样的,还是有更好的方法?

select * from table_name where ('column_name' != "String" or 'column_name' is NULL)
4

2 回答 2

1

!=当一个或两个操作数为空时返回空。

您可以使用 null 安全的等于运算符<=>(反转,因为您不希望等于):

not(column_name <=> 'String')

<=>当 column_name 为 null 且右操作数不为 null 时,将返回 0,而不是 null。

于 2021-04-09T21:16:41.593 回答
0

使用COALESCE

select * from table_name where 
COALESCE(`column_name`, "") != "String"
于 2021-04-09T21:55:06.600 回答