我正在运行此代码:
SELECT hID
FROM logonsHistory
WHERE aIDs NOT LIKE '%''101''%' AND
CASE src
WHEN 0 THEN
uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481)
END
我收到此错误:
关键字' IN'
附近的语法不正确
我不知道出了什么问题。
答案 0 :(得分:1)
在这种情况下,CASE
语句不合适。只需使用简单的OR
条件:
SELECT hID
FROM logonsHistory
WHERE aIDs NOT LIKE '%''101''%'
AND (
src <> 0 -- add a COALESCE here if src can be NULL
OR uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481)
)
...这基本上相当于只应用uID
过滤src = 0
,这就是您尝试使用查询完成的操作。
答案 1 :(得分:0)
when
语句的case
部分应选择单个值。你要做的是检查一个条件。
或者,如果您要检查这些值中的uid
,则应该
case when src = 0 then
case when uID IN (29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481)
then 'It is a Client ID'
-- add another when or else part here if required
end
else 'Not a UID and not a Client ID'
end
答案 2 :(得分:0)
听起来你不必使用CASE
请测试一下
SELECT hID
FROM logonsHistory
WHERE aIDs NOT LIKE '%''101''%'
AND ( (src = 0 --scr is 0 => must have uid in the list
AND UID IN (29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481))
OR src <> 0) --else src is not 0 and there is no additional condition
我对您not like
的情况有疑问,您是否单独测试了它?
答案 3 :(得分:0)
猜猜这就是你要找的东西
WHERE aIDs NOT LIKE '%''101''%' or
(
src = 0
AND
uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481
)
答案 4 :(得分:0)
看起来你的陈述格式不正确。你在“当0然后......结束
”中设置条件而不是值uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481)您有条件且不应该在那里