我有以下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语句中,我无法获取查询以返回任何记录。当两个引用的对象都是>时,我希望它返回PUMP_CODE字段中带有“MOTOR”或“SHAFT”的所有记录。 0.即使两个对象都大于0,它仍然不会返回任何记录。然而,后一个IIF声明工作正常。这个查询有问题吗?
答案 0 :(得分:2)
您的"MOTOR" Or "SHAFT"
错了。首先评估两个字符串的or
,or
使用iif()
的结果。
这意味着你有效地做了
IIF(..., true, ...)
或访问or
两个字符串的任何内容。
在任何几乎任何编程语言中,你都做不到
if (x == "a" or "b")
因为它将被执行为
if (x == ("a" or "b")) -> if (x == (result))
你需要做
if (x == "a") OR (x == "b")
答案 1 :(得分:0)
如果两个设置都大于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;