Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-00913:troppi valori durante l'utilizzo di maiuscole e minuscole

Quando utilizzi un case , devi restituire solo un singolo record, non più di 1. Per ottenere il risultato desiderato, userei un join esterno sinistro (supponendo che tu abbia un modo per unire table1 a table2), ma aggiungere il tuo controllo su table1.c1 nel condizione di join in modo che i valori table2 siano presenti solo se c1 <> '1'

select
    coalesce(table2.c1, table1.c1) c1,
    coalesce(table2.c2, table1.c2) c2,
    coalesce(table2.c3, table1.c3) c3
from table1
    left outer join table2
       on (your keys here)
           and table1.c1 <> '1' -- This gets table1 if c1 = '1';

Questa soluzione presuppone che table1 e table2 siano correlate. Se non riesci a metterli in relazione, sembra quasi che tu possa usare un'unione in cui prendi tutti i valori da table1 dove c1 ='1' e unisci quelli a tutte le righe table2. Se necessario, puoi includere i valori table2 solo se c1 <> '1'.

select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2; -- where c1 <> '1' -- if necessary

AGGIORNAMENTO

In base ai dati di esempio e all'output previsto, utilizza la seconda query sopra:

select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2 where c1 <> '1'

SQL Fiddle:http://www.sqlfiddle.com/#!4/ 710f0/1/0