当我在sql server中执行以下查询时,我得到以下错误
关键字' in'附近的语法不正确
查询:
select projectid
from projects
where iif(1!=1,
projects.projectid in (1,16,17,18,19,20,21,22,23),
1);
答案 0 :(得分:1)
等效逻辑是:
where (@TakeAllFlag = 1) or p.projectid in (1, 16, 17, 18, 19, 20, 21, 22, 23);
然而,这是过度的,因为第一个表达式只涉及常量并且始终为真。更常见的是,你会有类似的东西:
CASE
此外,如果您正在学习SQL - 而不是使用MS Access - 请学习IIF()
语句,而不是CASE
。 copyProperty
是标准SQL,基本上可用于所有数据库。
答案 1 :(得分:1)
这样可行。
说明:您不能在CASE语句的THEN部分使用IN运算符,这就是使用嵌套CASE语句的原因。现在,这个查询将不会给你任何记录,因为“1!= 1”总是返回false而那么部分将不会执行。
SELECT projectid
FROM projects
WHERE
projectid = CASE
WHEN 1 != 1
THEN
CASE
WHEN projectid IN (1,16,17,18,19,20,21,22,23)
THEN projectid
ELSE 1 END
END;
现在,IN关键字附近没有语法错误。您可以根据需要修改此查询。
答案 2 :(得分:0)
这应该简单如下:
select projectid
from projects
where projects.projectid in (1,16,17,18,19,20,21,22,23)
没有看到任何在where子句中放置IIF
函数的感觉。
iif(1!=1, projects.projectid in (1,16,17,18,19,20,21,22,23), 1)
在简单的英语中,上面的行与if 1 is not equal to 1 then use the IN expression else return 1
1总是等于1,其余的没有任何意义。