mysql中慎用or ,or表示并集,or左边表达式的条件不会限制or右边的表达式

mysql中慎用or ,or表示并集,or左边表达式的条件不会限制or右边的表达式。

项目中了踩了一下这个坑
在这里记下来

select * from t_invoice_detail where
Date(make_invoice_time) >= ‘2018-11-09’ and Date(make_invoice_time) <=‘2018-10-31’
and tax_rate
in (0.17,0.16)

select * from t_invoice_detail where
Date(make_invoice_time) >= ‘2018-11-09’ and Date(make_invoice_time) <=‘2018-10-31’
and tax_rate =0.17
or tax_rate=0.16

这两个查询结果是不一样的。
第一个是限定了在tax_rate在0.17和0.16中 且make_invoice_time在闭区间2018-11-09到2018-10-31中的所有结果

第二个则是tax_rate在0.17中且make_invoice_time在闭区间2018-11-09到2018-10-31中的所有结果
再加上tax_rate在0.16中的所有结果

实例
select count() from t_invoice_detail where
Date(make_invoice_time) >= ‘2018-11-09’ and Date(make_invoice_time) <=‘2018-10-31’
and tax_rate
in (0.17,0.16)
union all
select count(
) from t_invoice_detail where
Date(make_invoice_time) >= ‘2018-11-09’ and Date(make_invoice_time) <=‘2018-10-31’
and tax_rate =0.17
or tax_rate=0.16

结果展示如下
mysql中慎用or ,or表示并集,or左边表达式的条件不会限制or右边的表达式_第1张图片

第一个根本就没有符合条件的 ,而第二个则有一条

你可能感兴趣的:(mysql)