Java - MySQL 添加 ID 时查询 where 子句失败
Java - MySQL query where clause failing when ID added to time
我想搜索传感器事件的数据库,并删除时间戳等于或负十秒且传感器 ID 在已批准 ID 列表中的事件。
当我 运行 仅使用时间参数进行查询时,结果集符合预期,但是当添加 sensorID 参数时,它似乎返回了所有满足 sensorID 要求但忽略时间戳的传感器事件要求。
查询:
"SELECT * FROM events WHERE timestamp BETWEEN " + visionTime + " - INTERVAL 10 SECOND AND " + visionTime + " AND sensorID = 34035434 OR sensorID = 34035492 OR sensorID = 34035426 OR sensorID = 34035482 OR sensorID = 34035125 OR sensorID = 34035498 OR sensorID = 34035508 OR sensorID = 34035444 OR sensorID = 34035418 OR sensorID = 34035466 OR sensorID = 34035128 OR sensorID = 34035119 OR sensorID = 34035448 OR sensorID = 34037294 OR sensorID = 34035549;"
您需要为 or
条件使用括号,如下所示。原因是首先它将检查 and
条件并在后面添加多个或不带括号,并且将满足 or 条件之一导致完全忽略前一个 and
所以会更像
select * from table where col='a' and col2 = 'b' and (col3 = 'c' or col3 = 'd')
以上将 return 其中 col = 'a'
和 col2='b'
和 col3
是 c or d
您查询中的相同内容应为
"SELECT * FROM events
WHERE timestamp BETWEEN " + visionTime + " - INTERVAL 10 SECOND
AND " + visionTime + "
AND ( sensorID = 34035434
OR sensorID = 34035492
OR sensorID = 34035426
OR sensorID = 34035482
OR sensorID = 34035125
OR sensorID = 34035498
OR sensorID = 34035508
OR sensorID = 34035444
OR sensorID = 34035418
OR sensorID = 34035466
OR sensorID = 34035128
OR sensorID = 34035119
OR sensorID = 34035448
OR sensorID = 34037294
OR sensorID = 34035549
)"
我想搜索传感器事件的数据库,并删除时间戳等于或负十秒且传感器 ID 在已批准 ID 列表中的事件。
当我 运行 仅使用时间参数进行查询时,结果集符合预期,但是当添加 sensorID 参数时,它似乎返回了所有满足 sensorID 要求但忽略时间戳的传感器事件要求。
查询:
"SELECT * FROM events WHERE timestamp BETWEEN " + visionTime + " - INTERVAL 10 SECOND AND " + visionTime + " AND sensorID = 34035434 OR sensorID = 34035492 OR sensorID = 34035426 OR sensorID = 34035482 OR sensorID = 34035125 OR sensorID = 34035498 OR sensorID = 34035508 OR sensorID = 34035444 OR sensorID = 34035418 OR sensorID = 34035466 OR sensorID = 34035128 OR sensorID = 34035119 OR sensorID = 34035448 OR sensorID = 34037294 OR sensorID = 34035549;"
您需要为 or
条件使用括号,如下所示。原因是首先它将检查 and
条件并在后面添加多个或不带括号,并且将满足 or 条件之一导致完全忽略前一个 and
所以会更像
select * from table where col='a' and col2 = 'b' and (col3 = 'c' or col3 = 'd')
以上将 return 其中 col = 'a'
和 col2='b'
和 col3
是 c or d
您查询中的相同内容应为
"SELECT * FROM events
WHERE timestamp BETWEEN " + visionTime + " - INTERVAL 10 SECOND
AND " + visionTime + "
AND ( sensorID = 34035434
OR sensorID = 34035492
OR sensorID = 34035426
OR sensorID = 34035482
OR sensorID = 34035125
OR sensorID = 34035498
OR sensorID = 34035508
OR sensorID = 34035444
OR sensorID = 34035418
OR sensorID = 34035466
OR sensorID = 34035128
OR sensorID = 34035119
OR sensorID = 34035448
OR sensorID = 34037294
OR sensorID = 34035549
)"