Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-00913:zbyt wiele wartości podczas używania wielkości liter, gdy

Kiedy używasz case , musisz zwrócić tylko jeden rekord - nie więcej niż 1. Aby osiągnąć pożądany wynik, użyłbym lewego sprzężenia zewnętrznego (zakładając, że masz sposób na połączenie table1 z table2), ale dodaj czek na table1.c1 do warunek sprzężenia, aby wartości z tabeli2 były obecne tylko wtedy, gdy 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';

To rozwiązanie zakłada, że ​​tabela1 i tabela2 są powiązane. Jeśli nie możesz ich powiązać, brzmi to tak, jakbyś mógł użyć unii all, w której bierzesz wszystkie wartości z tabeli 1, gdzie c1 ='1' i łączysz je ze wszystkimi wierszami tabeli2. Jeśli to konieczne, możesz dołączyć tylko wartości tabeli 2, jeśli c1 <> '1'.

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

AKTUALIZUJ

Na podstawie przykładowych danych i oczekiwanych wyników użyj drugiego zapytania powyżej:

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. Warunkowa SUMA na Oracle

  2. TIMESTAMPDIFF w Oracle 11g?

  3. Bezpiecznik 6.3 dbcp podstawowe źródło danych

  4. Oracle PL/SQL:Jak wykonać DEREF z RÓŻNICY REF?

  5. Top n różnych wartości jednej kolumny w Oracle