HANA语法随手记:<> ‘NULL‘值问题
每种数据库对应NULL值的处理都不相同,最近有遇见这个语法,脑子老是记不清楚,干脆写个笔记记一下吧。
SQL:
SELECT B.TEST1
FROM A LEFT JOIN B ON A. T1 = B.T1
WHERE B.TEST1 <> 'A'
这种情况下 如果关联不到B表我是不想排除掉的,只是排除关联到并且B.TEST1 不等于A 的数据,
但是HANA返回的结果会排除掉没关联到B的数据,原因是因为:
当你添加`WHERE 右表.某列 <> 'A'` 条件时:
- 如果右表没有匹配的行(即`LEFT JOIN`后右表数据为`NULL`),则`右表.某列`的值是`NULL`
- `WHERE 右表.某列 <> 'A'` 条件在遇到`NULL`时,比较结果会是`UNKNOWN`(SQL的三值逻辑之一)
- `WHERE` 条件会过滤掉计算结果不为`TRUE`的行(即`UNKNOWN`的行会被排除)
**结论:`NULL`的行会被过滤掉**
- 在`LEFT JOIN`后右表某列为`NULL`的行
- 在`WHERE 右表.某列 <> 'A` 条件下,`NULL`值会导致比较结果为`UNKNOWN`
- `WHERE` 条件会排除这些`UNKNOWN`的行,因此它们不会被包含在最终结果中
解决办法
SELECT B.TEST1
FROM A LEFT JOIN B ON A. T1 = B.T1
WHERE IFNUULL(B.TEST1,'') <> 'A'
**实际效果:`NULL`的行会被`WHERE`条件排除**
所以,如果你在`LEFT JOIN`后添加了`WHERE 右表.某列 <> 'WG'`的条件,那么右表关联列为`NULL`的行会被排除在结果集之外。