我有以下SQL语句:
SELECT * FROM BOM INNER JOIN Parts ON BOM.PartID = Parts.PartID
WHERE (((BOM.PUMP_CODE) Like (IIf([Forms]![frmSelector]![tbMotor]>0 And
[Forms]![frmSelector]![tbShaft]>0,"MOTOR" Or "SHAFT",IIf([Forms]![frmSelector]![tbMotor]>0,"MOTOR","SHAFT")))))
ORDER BY BOM.BOM_INDEX;
在第一个IIF语句中,我无法获得返回任何记录的查询。当两个引用对象都>0时,我希望它在PUMP_CODE字段中返回所有带有"MOTOR"或"SHAFT"的记录。即使两个对象都大于0,它仍然不会返回任何记录。然而,IIF的后一个声明运行良好。这个查询有问题吗?
您的"MOTOR" Or "SHAFT"
错误。首先计算两个字符串的or
,or
的结果就是iif()
使用的结果。
这意味着你正在有效地进行
IIF(..., true, ...)
或者访问CCD_ 5的两个字符串的任何内容。
在几乎任何一种编程语言中,你都无法进行
if (x == "a" or "b")
因为它将作为执行
if (x == ("a" or "b")) -> if (x == (result))
你需要做
if (x == "a") OR (x == "b")
如果两个设置都大于0,请尝试使用IN子句而不是LIKE,并更改IIF以将两者放在一起,否则请使用工作子句。
我还添加了转义双引号来括起这对,并添加到单个项目中,以防您使用其中有空格的项目
SELECT * FROM BOM INNER JOIN Parts ON BOM.PartID = Parts.PartID
WHERE BOM.PUMP_CODE IN (
IIf([Forms]![frmSelector]![tbMotor]>0 And [Forms]![frmSelector]![tbShaft]>0, """MOTOR"",""SHAFT""",
IIf([Forms]![frmSelector]![tbMotor]>0,""MOTOR"",""SHAFT"")))
ORDER BY BOM.BOM_INDEX;