之前撸代码的时候一直没有意识到这个问题,今天同事在测试的时候突然发现了问题,请教一下各位大神为什么会出现这种情况 第一种写法: 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_nam
这个问题我也遇见过,这是因为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要加括号的。
你的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%")