我在 MS Access VBE 中生成了一个正在运行的 SQL 查询...只是不完全符合预期。
查询如下所示:
SELECT *
FROM qryPOExamDetail
WHERE [Job Number]= '*' AND [LookUp] = '100M' OR [LookUp] = '120M' OR [LookUp] = '130M' OR [LookUp] = '140M' OR [LookUp] = '150M'
这将返回除'100M'
之外的所有记录。我究竟做错了什么?我用括号玩了一下午,但没有运气。
我刚刚更改了一些参数,它的工作原理如下:
SELECT * FROM qryPOExamDetail WHERE [Job Number]= 'C18TN02001' AND ([LookUp] = '100M' OR [LookUp] = '120M' OR [LookUp] = '130M' OR [LookUp] = '140M' OR [LookUp] = '150M')
另外两个更改:
SELECT * FROM qryPOExamDetail WHERE [Job Number]= 'C18TN02001' AND [LookUp] IN ('100M','120M')
上面的方法有效,但是这个不行:
SELECT * FROM qryPOExamDetail WHERE [Job Number]= '*' AND [LookUp] IN ('100M','120M')
最佳答案
为了可读性,我倾向于使用 in
正如 Gordon Linoff 正确建议的那样,但为了提供更简洁的替代方案,您还可以使用 like
操作符如下:
select * from qryPOExamDetail where [Job Number]= "*" and [LookUp] like "1[02345]0M"
另请注意:
[Job Number]= "*"
与职位编号
完全等于 *
,并且不使用星号作为通配符运算符来匹配职位编号
的所有可能值。
要匹配所有值,请使用 like
该字段的运算符,例如:
[Job Number] like "*"
您的原始查询返回除 LookUp = "100M"
之外的所有内容的原因是 operator precedence .
and
运算符优先于 or
运算符,这意味着您的原始查询...
SELECT *
FROM qryPOExamDetail
WHERE
[Job Number]= '*' AND [LookUp] = '100M'
OR [LookUp] = '120M'
OR [LookUp] = '130M'
OR [LookUp] = '140M'
OR [LookUp] = '150M'
...读取:
“从 qryPOExamDetail
表中选择其中 Job Number
等于 *
且 LookUp
等于 '100M'
,或其中 LookUp
等于 '120M'
,或其中 LookUp
等于 '130M'
..."
这里,运算符优先级被松散地翻译为上面句子中的标点符号。
因此,因为显然没有 Job Number
值等于 *
且 LookUp
值等于 '100M 的记录'
,此条件组合没有返回任何记录。
关于SQL 字符串让我抓狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065208/