我有以下查询:
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/