1. 问题
在今天的代码开发中,查询数据库的时候,我需要一个字段 即不是空,或者不是空字符串’’,
我在实际开发的过程中的SQL如下:
SELECTcount(distinct_id) AS count,DATE_FORMAT(happen_date,'%Y-%m-%d') AS date,search_keyword AS typeFROMtdm_bas_view_detailsWHEREproject_id='pid_1550737316860294'AND happen_date>='2019-06-20'AND happen_date<='2019-07-05'AND search_keyword IS NOT NULLOR search_keyword <> ''AND source_type='search_visit'
可以看出我在如下的位置,需要search_keyword既不为空,也或者不为空字符串
AND search_keyword IS NOT NULL OR search_keyword <> ''
这样的写法导致了 AND search_keyword IS NOT NULL 之前的查询条件全部失效。
原因是 OR 将前后的查询条件分成了两个部分,并不是按照我的意向只是一个字段的两个值,从而导致查询的数据结果不正确。
2. 解决方案
如果需要对某个字段进行两种情况的判断的时候,要将多个OR用小括号括起来再和AND进行“与”,或者将多个AND用小括号括起来再与OR进行“或”。
所以,如上的代码需要改造成如下就OK了:
SELECTcount(distinct_id) AS count,DATE_FORMAT(happen_date,'%Y-%m-%d') AS date,search_keyword AS typeFROMtdm_bas_view_detailsWHEREproject_id='pid_1550737316860294'AND happen_date>='2019-06-20'AND happen_date<='2019-07-05'AND (search_keyword IS NOT NULL OR search_keyword <> '')AND source_type='search_visit'
