SQL 字符串让我抓狂

标签 sql vba ms-access

我在 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/

相关文章:

sql - 具有多列唯一约束名称的 PostgreSQL ON CONFLICT

excel - 让函数报告 2 个输出的最简单方法

excel - 以编程方式注释 Excel 图表

java - 使用文本输入搜索 Access 日期列之间/和

SQL排序表和更新列

sql - 检查以前的记录以更新 Oracle 中的当前记录

excel - 打开网络目录上的文件

MS Access 中的 SQL 更新问题 - 操作必须使用可更新的查询

ms-access - Access 2007坚持保存查询

mysql - 选择 3 个月前上次事件的地点