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

ORA-00913:for mange værdier ved brug af case when

Når du bruger en case , skal du kun returnere en enkelt post - ikke mere end 1. For at opnå dit ønskede resultat, ville jeg bruge en venstre ydre joinforbindelse (forudsat at du har en måde at forbinde tabel1 til tabel2), men tilføje din check på tabel1.c1 i join-betingelse, så tabel2-værdier kun vil være til stede, hvis 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';

Denne løsning antager, at tabel1 og tabel2 vedrører. Hvis du ikke kan relatere dem, så lyder det næsten som om du kan bruge en union all in, hvor du tager alle værdierne fra tabel1 hvor c1 ='1' og forbinder dem til alle tabel2 rækker. Hvis det er nødvendigt, kan du kun inkludere tabel2-værdier, hvis c1 <> '1'.

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

OPDATERING

Baseret på dine eksempeldata og forventet output, brug venligst den anden forespørgsel ovenfor:

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




  1. Tjek, om laravel-modellen blev gemt, eller forespørgslen blev udført

  2. Følgerklynger – 3 store brugssager til synkronisering af SQL- og NoSQL-implementeringer

  3. MySQL:DATE_ADD

  4. Skal jeg gemme prisen som decimal eller heltal i Mysql?