sql >> Databasteknik >  >> RDS >> Oracle

ORA-00913:för många värden när du använder fall när

När du använder ett case , du måste bara returnera en enskild post - inte mer än 1. För att uppnå önskat resultat skulle jag använda en vänster yttre koppling (förutsatt att du har ett sätt att ansluta tabell1 till tabell2), men lägg till din check på tabell1.c1 i join-villkor så att tabell2-värden endast skulle finnas om 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';

Denna lösning förutsätter att tabell1 och tabell2 hänför sig. Om du inte kan relatera dem, så låter det nästan som att du kan använda en union all i där du tar alla värden från tabell1 där c1 ='1' och förenar dem till alla tabell2-rader. Om det behövs kan du bara inkludera tabell2-värden om c1 <> '1'.

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

UPPDATERA

Baserat på dina exempeldata och förväntade utdata, använd den andra frågan ovan:

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. Hur lagrar man .pdf-filer i MySQL som BLOB-filer med PHP?

  2. Få resultat från räknefrågor via getSingleScalarResult() och groupBy() - undantag

  3. Kompileringsproblem med MySQL C API på MAC OS X 10.6

  4. Visa bilder en efter en med nästa och föregående funktionalitet