2017-09-06 8 views
0

Ich habe zwei Tabellen, und die Join-Bedingung muss von einem bestimmten Wert der zweiten Tabelle abhängen. In der folgenden Tabelle ist die Zeile die Join-Bedingung, die ich versuche zu implementieren, aber es wirft Kompilierungsfehler, nicht sicher, wie dies zu tun ist.Oracle-SQL-Join mit case-Anweisung

Hinweis: Dies ist ein Teil einer großen Abfrage, Join wird effizienter Weg sein.

Linie Wurf Kompilierungsfehler

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

- vollständige 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; 

Antwort

2

case keine Liste zurück. Es gibt einen einzelnen Wert zurück. Sie können die Logik als schreiben:

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; 

oder, Sie leicht diese

 on (prim.ind = data.hasIndicator) or (data.hasIndicator = 'YES') 
zu

vereinfachen könnte