Sql WHERE子句返回错误的情况
我正在运行以下代码:Sql WHERE子句返回错误的情况,sql,sql-server,Sql,Sql Server,我正在运行以下代码: 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”附近的语法不正确 我不知道出了什么问题。case语句的when部分
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”附近的语法不正确
我不知道出了什么问题。case语句的when部分应该选择一个值。你要做的是检查一个条件
或者,如果您正在检查这些值中的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
听起来你不需要用例,请测试一下
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
我怀疑你的情况不太好。你一个人测试过吗?我猜这就是你想要的
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
)
在这种情况下,案例陈述不合适。只需使用一个简单或条件:
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)
)
。。。这基本上相当于仅在src=0时应用uID过滤,这似乎是您试图通过查询实现的。您的语句似乎格式不正确。当0时,您放置了一个条件而不是一个要设置的值,然后。。。。。。结束
29,41,42,45,49,50,57,73,83107166349356367375376416471472473474474481中的uID有一个条件,不应该在那里对吧。。。因为这些数字代表客户ID。当src=0 Clients表时,则为uID INclientIDs。如果src是其他东西,那么它不是uID,也不是clientID。。那很好用。当我添加这个案例时,一切都爆炸了,你需要使用这个案例吗?或者这是你的要求?当src不是0时会发生什么,它不会忽略它吗?它是什么?我在anwser中添加注释。请看一下。我想说的是CASE src 0,然后做一个和uID IN。那我该怎么做?这就是你想做的吗?嵌套大小写?这或多或少是正确的。但是,如果src为null,则除非uID具有match@t-克劳森:同意。这完全取决于src是否允许空值。在这种情况下,需要额外小心一点。