GBase 8a
适配迁移
文章
GBase 8a空值查询,任意一列为空NULL或某个值的数据行的方法
GBase社区管理员发表于2021-06-28 10:31:1236次浏览0个评论
今天才发现了in的一个用法,在GBase 8a里做了实验,可以让一个值in一组列来实现:任意一列等于值就返回的方法。
需求
查询任意一列为NULL ,或者为一个指定字符串,比如'<ERROR>'的数据行。
我这里用2列做个示例
gbase> select * from t1;
+------+-------+
| id | name |
+------+-------+
| NULL | First |
| 222 | NULL |
| 333 | Third |
+------+-------+
3 rows in set (Elapsed: 00:00:00.00)
普通实现 IS NULL
用多个IS NULL的OR条件来实现,看上去语法明确,很容易理解。
gbase> select * from t1 where id is null or name is null;
+------+-------+
| id | name |
+------+-------+
| NULL | First |
| 222 | NULL |
+------+-------+
2 rows in set (Elapsed: 00:00:00.00)
IN的写法
数值 IN (字段列表) 这个写法,我还是第一次用。注意NULL不等于任何值,如下已经将NULL转成了空字符串''来操作。
gbase> select * from t1 where '' in(nvl(id,''),nvl(name,''));
+------+-------+
| id | name |
+------+-------+
| NULL | First |
| 222 | NULL |
+------+-------+
2 rows in set (Elapsed: 00:00:00.01)
同样的,其它值也是可以的。
gbase> select * from t1 where '222' in(id,name);
+------+------+
| id | name |
+------+------+
| 222 | NULL |
+------+------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select * from t1 where 'First' in(id,name);
+------+-------+
| id | name |
+------+-------+
| NULL | First |
+------+-------+
1 row in set (Elapsed: 00:00:00.01)
评论已关闭
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526