第一种情况IS NOT NULL BETWEEN 接连使用为什么不可以,会报错?
SELECT
*
FROM
contract c
LEFT JOIN apply a ON c.apply_id = a.apply_id
WHERE
a.is_ex_apply = '1'
AND c.actual_loan_time IS NOT NULL BETWEEN 0
AND 100;
第二种情况就可以:
SELECT
*
FROM
contract c
LEFT JOIN apply a ON c.apply_id = a.apply_id
WHERE
c.actual_loan_time IS NOT NULL
AND a.is_ex_apply = '1' BETWEEN 0
AND 100;
第一种指的是c.actual_loan_time IS NOT NULL在0到100
0到100已经指定数值期间了,你再指定个null,就多余了。
你这个between是想做什么呢?这么写虽然规则上没报错,但是逻辑上我找不到什么意义啊
前后的条件是有重合的,value限定本身就要求非空了
null 表示什么也不是, 不能=、>、< ... 所有的判断,结果都是false,所有只能用 is null进行判断。默认情况下,推荐使用 IS NOT NULL去判断,因为SQL默认情况下对!= Null的判断会永远返回0行,但没有语法错误。如果你一定想要使用!= Null来判断,需要加上这个语句:set ANSI_NULLS off这时你会发现IS NOT NULL 和 != null 是等效的。
and c.actual_loan_time BETWEEN 0 AND 100 AND c.actual_loan_time IS NOT NULL
第一你判断了两个条件中间应该加add连接
第二sql语句从右向左处理,既然在0-100,肯定不为null
BETWEEN 0 AND 100 本身就是单个值的条件,就好像说 select table t where t.a is not null is not null 为什么错,写了两个条件,从语法上是错的。
举个例子,limit是对整个查询结果的筛选,所以可以写在最后面,但BETWEEN AND 和is not null 是一样的,可以作为字段的条件。
所以以上两种写法都是错的。
本来between就指定取值范围了,再弄个不为空,不觉得多此一举吗
0到100已经指定数值期间了,你再指定个null,就多余了,本来between就指定取值范围了,再弄个不为空,没多大意义
非要这么做的话 not null 后面加 and c.actual_loan_time
那个语法不支持 可能是因为mysql 也没想到你这么玩的 所以不支持
还有已经是0 到 100了 就不要调皮 再加 not null了
SELECT
*
FROM
contract c
LEFT JOIN apply a ON c.apply_id = a.apply_id
WHERE
a.is_ex_apply = '1'
AND c.actual_loan_time IS NOT NULL and c.actual_loan_time BETWEEN 0
AND 100;