SQL查询含null的数组行失败:CONTAINS语句返回空结果求助
问题原因及解决方法
原因
SQL里的null表示未知值,任何与null的比较操作(包括CONTAINS函数的匹配)都会返回unknown,而WHERE子句只会筛选出判断结果为true的行,所以你的查询返回空结果。另外,多数数据库的CONTAINS函数设计用于匹配数组中的非null元素,不支持直接匹配null。
解决方法
根据你使用的数据库类型,选择对应的查询语句:
PostgreSQL
- 直接判断数组是否等于
[null]:SELECT * FROM table WHERE column1 = ARRAY[null]; - 检查数组中是否存在
null元素:SELECT * FROM table WHERE array_position(column1, null) IS NOT NULL;
MySQL
如果你的column1是JSON类型数组:
- 使用
JSON_CONTAINS匹配null:SELECT * FROM table WHERE JSON_CONTAINS(column1, 'null'); - 直接判断数组是否等于
[null]:SELECT * FROM table WHERE column1 = JSON_ARRAY(null);
SQL Server
- 检查数组中是否存在
null元素(若数组以字符串形式存储):SELECT * FROM table WHERE EXISTS (SELECT 1 FROM STRING_SPLIT(CAST(column1 AS VARCHAR(MAX)), ',') WHERE value IS NULL);
内容的提问来源于stack exchange,提问作者Lucy Gu
相关产品推荐
相关产品推荐

