0

这是我正在使用的代码:

SELECT 'HOPE', RPRAWRD_AIDY_CODE, COUNT(DISTINCT RPRAWRD_PIDM) AS NumberOfStudents,  Sum(RPRAWRD_PAID_AMT) AS AmountPaid
FROM FAISMGR.RPRAWRD, FAISMGR.RFRBASE
WHERE RPRAWRD_AIDY_CODE = '1213'
     AND RPRAWRD_FUND_CODE = RFRBASE_FUND_CODE
     AND RPRAWRD_AWST_CODE = 'ACPT'
     AND RPRAWRD_PAID_AMT > 0 
     AND RFRBASE_FSRC_CODE = 'HOPE'
GROUP BY RPRAWRD_AIDY_CODE;

结果产生 3952 条记录。

一些记录在 RPRAWRD_PAID_AMT 中包含 NULL,如果我添加

AND RPRAWRD_PAID_AMT IS NOT NULL

到 WHERE 子句,我得到完全相同的结果:3952 条记录。所以,我的问题是: >0 是否排除空值,因为它们评估为假,使得 IS NOT NULL 不必要?

4

2 回答 2

1
RPRAWRD_PAID_AMT > 0 

true仅当 的值RPRAWRD_PAID_AMT大于时才会返回0。比较null结果unknown,这也是false

所以是的,你不需要额外的null检查。

于 2013-07-25T16:29:18.193 回答
0

NULLSQL 中的大多数操作返回NULL,在条件句中计算为 false。

mysql> SELECT NULL > 0;
+----------+
| NULL > 0 |
+----------+
|     NULL |
+----------+
1 row in set (0.00 sec)

所以是的,RPRAWRD_PAID_AMT > 0会过滤掉空值,但明确地说也没有什么坏处。

于 2013-07-25T16:32:58.880 回答