1

我有以下带有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;
4

3 回答 3

0

表达式返回单个值case,而不是像a=b. 但是,您可以使用一系列逻辑运算符来模拟这种行为:

SELECT *
FROM   podConfigKey_Tab PCK 
WHERE  PCK.DEFAULTKEYIDVALUE = 'FALSE' OR
       PCK.Keyid != 'TLMAPIConfigMgr.UseDB'
于 2015-08-10T19:41:42.830 回答
0

您的查询应该更像下面提到的(删除 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 ;
于 2015-08-10T19:58:00.467 回答
0

OracleCASE表达式(如DECODE)返回一个值,但它本身不是可以计算为TRUEor的谓词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 小提琴示例

于 2015-08-11T05:04:49.630 回答