Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-00913:твърде много стойности при използване на case when

Когато използвате case , трябва да върнете само един запис - не повече от 1. За да постигна желания резултат, бих използвал ляво външно съединение (ако приемем, че имате начин да свържете table1 към table2), но добавете вашата проверка на table1.c1 в условие за присъединяване, така че стойностите на table2 да присъстват само ако 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';

Това решение предполага, че table1 и table2 са свързани. Ако не можете да ги свържете, тогава звучи почти така, сякаш можете да използвате обединение all, в което вземате всички стойности от таблица1, където c1 ='1' и ги обединявате към всички редове на таблица2. Ако е необходимо, можете да включите стойности на table2 само ако c1 <> '1'.

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

АКТУАЛИЗАЦИЯ

Въз основа на вашите примерни данни и очаквания резултат, моля, използвайте втората заявка по-горе:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL Regex не връща очакваните резултати

  2. Грешка в TNS Listener

  3. обединяване на множество маси

  4. SQL:Вземете записи, създадени във времеви диапазон за конкретни дати

  5. Ограничение на Oracle за заявка след стойността на search_condition