记一次mysql语句因为字符优先级的问题引起的查询结果不一致问题
2018-01-02 11:37
931 查看
需求: 查询符合F3001_SECOND为一小时以内的数量, 修改前代码 SELECT count(1) FROM iecp.tb3001_historyevent h, iecp.tb1001_container c WHERE ( h.F4201_TYPEID = 16 AND h.F4204_SORTID = 6 AND h.F3001_FLAG = 1 AND h.F3001_GROUPCODE = c.F1001_CONCODE AND c.F1001_SRVTYPE = 01 ) OR ( h.F4201_TYPEID = 17 AND h.F4204_SORTID = 6 AND h.F3001_FLAG = 1 AND h.F3001_GROUPCODE = c.F1001_CONCODE AND c.F1001_SRVTYPE = 01 ) AND h.F3001_SECOND >= 1514850247 AND h.F3001_SECOND <= 1514853847
查询结果1552,而正确的结果应该为0,
错误发生在了后面拼接的and语句,时间限制只对第二个or()的查询起作用,没有对第一个or查询起作用
修改如下:
SELECTcount(1)FROMiecp.tb3001_historyevent h,iecp.tb1001_container cWHERE((h.F4201_TYPEID = 16AND h.F4204_SORTID = 6AND h.F3001_FLAG = 1AND h.F3001_GROUPCODE = c.F1001_CONCODEAND c.F1001_SRVTYPE = 01)OR (h.F4201_TYPEID = 17AND h.F4204_SORTID = 6AND h.F3001_FLAG = 1AND h.F3001_GROUPCODE = c.F1001_CONCODEAND c.F1001_SRVTYPE = 01))AND h.F3001_SECOND >= 1514850247AND h.F3001_SECOND <= 1514853847
结果正确为0
另附上mySQL优先级顺序
优先级 运算符
(最高) !
-(负号),~(按位取反)
^(按位异或)
*,/(DIV),%(MOD)
+,-
>>,<<
&
|
=(比较运算),<=>,<,<=,>,>=,!=,<>,IN,IS NULL,LIKE,REGEXP
BETWEEN AND,CASE,WHEN,THEN,ELSE
NOT
&&,AND
XOR
||,OR
(最低) =(赋值运算),:=
相关文章推荐
- MySQL查询全部数据集结果不一致问题解决方案
- Mybatis事务下解决多次select语句查询结果一致的问题+案列(获取全局序列ID)
- mysql查找语句中包含中文字符时查询失效的问题及解决方法
- Mysql字符引起的中文查询问题
- MySQL查询全部数据集结果不一致问题解决方案
- MySQL一次执行多条语句的实现及常见问题(C API)
- MySQL一次执行多条语句的实现及常见问题(C API Commands out of sync; you can't run this command now)
- 记一次SQL语句编写不规范引起的小问题(where条件varchar自动转number)
- C# SQL语句参数化,通过包含like关键字的子句查询无结果问题
- 解决MySql Command Line Client查询结果乱码问题
- 解决SQL语句中含有中文字符无法查询问题
- MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyn
- mysql 导出select语句结果到excel文件遇到问题及解决方法
- 由于查询语句中日期的格式引起的问题
- hibernate+mysql中文查询不出结果,其他查询正常,SQL语句也正常
- php中使用mysql_stmt(预处理语句)来处理select查询结果
- 解决SQL语句中含有中文字符无法查询问题
- 关于oracle 12c SQL语句执行结果与11g不一致的问题
- LAMP开发精要(13):PHP中使用mysql_stmt(预处理语句)处理select查询结果
- MySQL循环遍历执行查询SQL语句结果的方法