2017-09-06 16 views
0

2つの表があり、結合条件は2番目の表の特定の値に依存する必要があります。以下のSQLでは、実装しようとしている行の結合条件ですが、コンパイルエラーが発生します。case文を使用したOracle SQL結合

注:これは大きなクエリの一部です。参加するのが効率的です。 完全なSQL

with data as 
    (select 
    'YES' hasIndicator, 'Gold' item, 12 itemId 
    from dual 
    union 
    select 
    'YES' hasIndicator, 'Silver' item, 13 itemId 
    from dual 
    union 
    select 
    'NO' hasIndicator, 'Platinum' item, 14 itemId 
    from dual), 
prim as 
    (select 
    'NO' ind, 1 id 
    from dual 
    union 
    select 
    'YES' ind, 2 id 
    from dual) 
select * 
from prim 
    join data on 
    data.hasIndicator in (case when prim.ind = 'YES' then ('YES') when prim.ind = 'NO' then ('YES','NO') end) 
where 
    id = 1; 

答えて

2

caseリストを返しません -

data.hasIndicator in (case when prim.ind = 'YES' then 'YES' when prim.ind = 'NO' then ('YES','NO') end) 

は、コンパイルエラーを投げ

ライン。単一の値を返します。

select * 
from prim join 
    data 
    on (prim.ind = 'YES' and data.hasIndicator = 'YES') or 
     (prim.ind = 'NO' and data.hasIndicator IN ('YES', 'NO')) 
where id = 1; 

か、あなたは少し

 on (prim.ind = data.hasIndicator) or (data.hasIndicator = 'YES') 
にこれを簡素化することができます:あなたはとロジックを書くことができます
関連する問題