我有以下查询与CASE
语句,这是显示"缺少关键字错误"
你能帮帮我吗?
select *
from podConfigKey_Tab PCK
WHERE
CASE WHEN (PCK.Keyid = 'TLMAPIConfigMgr.UseDB'
and PCK.DEFAULTKEYIDVALUE = 'FALSE')
THEN PCK.Keyid = 'TLMAPIConfigMgr.UseDB'
ELSE PCK.Keyid != 'TLMAPIConfigMgr.UseDB'
END;
case
表达式返回单个值,而不是像a=b
那样的语法结构。但是,您可以使用一系列逻辑操作符来模拟此行为:
SELECT *
FROM podConfigKey_Tab PCK
WHERE PCK.DEFAULTKEYIDVALUE = 'FALSE' OR
PCK.Keyid != 'TLMAPIConfigMgr.UseDB'
您的查询应该更像下面提到的(删除else部分以使下面的查询工作),您需要在WHERE子句之后有谓词,以便您可以匹配由CASE语句返回的值
select * from podConfigKey_Tab PCK
WHERE PCK.Keyid =
CASE WHEN (PCK.Keyid = 'TLMAPIConfigMgr.UseDB' and PCK.DEFAULTKEYIDVALUE = 'FALSE') THEN 'TLMAPIConfigMgr.UseDB'
END ;
Oracle CASE
表达式(如DECODE
)返回一个值,但它本身不是一个可以计算为TRUE
或FALSE
的谓词。您需要建立一些条件,以便计算CASE
语句返回的值。例如:
with sample_data as
(select 'dog' pet, 'y' has_fur from dual union all
select 'cat', 'y' from dual union all
select 'bird', 'n' from dual)
select *
from sample_data
where (case when has_fur = 'y' then 1 else 0 end) = 1;
SQL Fiddle示例