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'col3c 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 
  )"