mysql中and和or的一些问题

nyc18713582529 2018-05-28 04:20:06
之前撸代码的时候一直没有意识到这个问题,今天同事在测试的时候突然发现了问题,请教一下各位大神为什么会出现这种情况
第一种写法:
SELECT * FROM thf_user t WHERE t.type = 'O' AND t.mobile LIKE "%18713582529%" OR t.login_name LIKE "%18713582529%" 

结果如图
第二种写法:
SELECT * FROM thf_user t  WHERE t.type = 'O' AND  t.login_name LIKE "%18713582529%" OR t.mobile LIKE "%18713582529%"

结果如图
小弟先知道为什么第二种写法里面的t.type = 'O'条件并没有起到限制的作用,而在第一种写法里面仅仅是换了一下OR连接条件的位置结果就改变了,在开发中对于OR连接的条件是否都是放在()中的,而这又是为什么呢
...全文
1425 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
FightingITPanda 2018-05-30
  • 打赏
  • 举报
回复
这个问题我也遇见过,这是因为SQL执行顺序是根据优先级来的,and的优先级比or高,not最高,你第一种情况相当于SELECT * FROM thf_user t WHERE (t.type = 'O' AND t.mobile LIKE "%18713582529%") OR t.login_name LIKE "%18713582529%" 就是先根据前两个条件执行,查询结果拼上or的条件查询结果中不重复的部分,同理第二种情况相当于SELECT * FROM thf_user t WHERE (t.type = 'O' AND t.login_name LIKE "%18713582529%") OR t.mobile LIKE "%18713582529%",查询结果不一样的,你可以本地试下,所以规范写法是or要加括号的。
AninZz 2018-05-30
  • 打赏
  • 举报
回复
1和2 或者3 自然那个查出来数据多就是哪个了
nyc18713582529 2018-05-29
  • 打赏
  • 举报
回复
引用 2 楼 maradona1984 的回复:
这种要打括号的,不然会有歧义
能相信说一下吗
nyc18713582529 2018-05-29
  • 打赏
  • 举报
回复
引用 1 楼 lynmison 的回复:
你的SQL逻辑有问题,看SQL,本意是类型为O,手机号或者用户名匹配某个条件的记录? 以下两种结果是一样 SELECT * FROM thf_user t WHERE t.type = 'O' AND (t.mobile LIKE "%18713582529%" OR t.login_name LIKE "%18713582529%") SELECT * FROM thf_user t WHERE t.type = 'O' AND (t.login_name LIKE "%18713582529%" OR t.mobile LIKE "%18713582529%")
我知道后面的要放在括号里,但是我想知道不放在括号里为什么第一个条件没起作用啊
hr_hin 2018-05-29
  • 打赏
  • 举报
回复
and运算优先级高于or
maradona1984 2018-05-28
  • 打赏
  • 举报
回复
这种要打括号的,不然会有歧义
天行归来 2018-05-28
  • 打赏
  • 举报
回复
你的SQL逻辑有问题,看SQL,本意是类型为O,手机号或者用户名匹配某个条件的记录? 以下两种结果是一样 SELECT * FROM thf_user t WHERE t.type = 'O' AND (t.mobile LIKE "%18713582529%" OR t.login_name LIKE "%18713582529%") SELECT * FROM thf_user t WHERE t.type = 'O' AND (t.login_name LIKE "%18713582529%" OR t.mobile LIKE "%18713582529%")

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧