忽略OR子句后的MySQL AND子句

Gil*_*son 0 mysql

我有以下准备语句查询:

 SELECT id FROM CustomerSettings WHERE id  >= ? OR displayNameType  = ? AND id  < ? LIMIT 5 OFFSET 1
Run Code Online (Sandbox Code Playgroud)

忽略查询的"id <"部分.奇怪的是,如果我在OR语句之前移动语句,那么它将由MySQL数据库引擎正确评估.这种预期的行为似乎很奇怪.我也尝试将OR子句放在括号中,但遗憾的是这也没有用; 紧跟OR之后的AND子句仍然被忽略.

Oli*_*ain 5

这是由于运营商的优先权.AND之前绑定OR所以你的查询是WHERE (id >= ?) OR (displayNameType = ? AND id < ?).事情的顺序很重要.我建议使用圆括号使秩序ANDOR明确的.