Sql Oracle:WHERE子句中的CASE条件语句不起作用?

Sql Oracle:WHERE子句中的CASE条件语句不起作用?,sql,oracle,ora-00905,Sql,Oracle,Ora 00905,我在下面查询了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

我在下面查询了
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'

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 ;

您的查询应该更像下面提到的(删除了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;

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;

表达式返回一个值;缺少将该值与某个值进行比较的谓词。您可能希望显示一些示例数据和预期的查询结果。
CASE
表达式返回一个值;缺少将该值与其他值进行比较的谓词。您可能希望显示一些示例数据和预期的查询结果。