在查询条件为OR时候,要注意OR条件最小执行单元到带 ()
比如下面的sql,查询时,就不能同时满足state = 1 或 state = 3
SELECT
order_code ,
received_linkman ,
settled_amount
FROM
order_info
WHERE
account_code = #{accountCode}
AND
state = 1
OR
state = 3
AND pay_time >= #{startTime}
AND pay_time <= #{endTime}
AND CONCAT(order_code,received_linkman)
LIKE #{searchText}
ORDER BY
pay_time
DESC
正确写法:
SELECT
order_code ,
received_linkman ,
settled_amount
FROM
order_info
WHERE
account_code = #{accountCode}
AND
( state = 1 OR state = 3 )
AND
AND pay_time >= #{startTime}
AND pay_time <= #{endTime}
AND CONCAT(order_code,received_linkman)
LIKE #{searchText}
ORDER BY
pay_time
DESC
总结:
1. 在查询的WHERE条件中,AND要优于OR
2. 如果要改变优先级, 需要在最小逻辑判断的条件外加括号()