java - SQL 返回搜索,即使检查不应该返回

标签 java sql

我有以下查询:

SELECT * FROM project WHERE   year = 11 AND orderDate LIKE ? OR  orderNo LIKE ? OR  prodNo LIKE ? OR  prodName LIKE ? OR  inquiryDate LIKE ? OR  confirmDate LIKE ? OR  deliveryLT LIKE ? OR  deliveryRiis LIKE ? OR  signsPrice LIKE ? OR  vrPrice LIKE ? OR  deliveryPrice LIKE ? OR  unexpectPrice LIKE ? OR  riisBonus LIKE ? OR  kennBonus LIKE ? OR  profit LIKE ? OR  profitPercent LIKE ? OR  quantity LIKE ?;

问题是,即使列年份不是11,我仍然收到数据,是因为我使用了 OR 吗? (使用问号是因为我使用准备好的语句)。

当我这样做的时候

SELECT * FROM project WHERE   year = 11 AND orderDate LIKE ? ;

它工作正常,所以我假设它是 OR 是否正确?如果是这样,我该如何解决?我希望其中一个是真实的,并且年份是 100% 真实的;

最佳答案

SQL rules of precedence声明“and”位于“or”之前,因此您的 SQL 相当于:

SELECT * FROM project WHERE ( year = 11 AND orderDate LIKE ? ) OR  orderNo LIKE ?
OR  prodNo LIKE ? OR  prodName LIKE ? OR  inquiryDate LIKE ?

使用添加的括号覆盖它以满足您的要求:

SELECT * FROM project WHERE   year = 11 AND
 (orderDate LIKE ? OR  orderNo LIKE ?
  OR  prodNo LIKE ? OR  prodName LIKE ? OR  inquiryDate LIKE ?)

关于java - SQL 返回搜索,即使检查不应该返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692921/

相关文章:

c# - 哪个更好更便宜 : class matching vs exception?

php - 单击表格行中的链接后,更改相应 MYSQL 数据库记录的单元格值?

java - 使用 JDBC 在 Java 中检索 2d varray

java - 在我的 Spring Boot 应用程序中 Swagger

mysql - 如何多次更新表上的字段,不包括不存在的字段

sql - oracle sql 中的动态数据透视 - 过程

sql求和重复行

mysql - 查询总收入

java - Java中二维数组的声明和格式

Java - 如何找到 BigDecimal 的倒数?