SQL - 使用案例逻辑的条款

时间:2013-12-18 06:37:38

标签: sql oracle

我需要在查询中使用case类型的逻辑。使用的数据库:Oracle 11g

目前的查询如下:

SELECT name 
FROM merchant m 
WHERE NOT EXISTS ( 
   SELECT 1 
   FROM settlement s 
   WHERE s.sid = m.mid 
   AND s.rpt_id IN ('111','112','202')
)

还有另一个列SRID,它优先于SID,也可以映射到MID。现在,我们需要像IF SRID为null然后使用SID,否则使用SRID在WHERE子句中映射到MID。

3 个答案:

答案 0 :(得分:3)

我想你想要coalesce function,它返回第一个非空值。不幸的是,我无法访问Oracle系统进行确认。

select NAME 
from merchant m 
where NOT EXISTS (
    SELECT 1 from SETTLEMENT s 
    where coalesce(s.SRID,s.SID) = m.MID and 
    s.RPT_ID IN ('111','112','202')
    )

Here是coalesce和nvl之间的比较。 (我不熟悉nvl)

答案 1 :(得分:0)

请使用

NVL(s.SRID, s.SID) = m.MID

而不是

s.SID = m.MID

在where条件下。

答案 2 :(得分:0)

尝试使用NVL功能。

SELECT NAME 
FROM   merchant m 
WHERE  NOT EXISTS(
     SELECT 1 
     FROM settlement s 
     WHERE NVL(s.srid, s.sid) = m.mid 
     AND s.rpt_id IN ('111','112','202'));