Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-00913:quá nhiều giá trị trong khi sử dụng trường hợp khi

Khi bạn sử dụng case , bạn chỉ phải trả về một bản ghi duy nhất - không nhiều hơn 1. Để đạt được kết quả mong muốn, tôi sẽ sử dụng một phép nối bên ngoài bên trái (giả sử bạn có cách nối table1 với table2), nhưng thêm dấu kiểm của bạn trên table1.c1 vào tham gia điều kiện để các giá trị table2 sẽ chỉ hiện diện nếu 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';

Giải pháp này giả định table1 và table2 có quan hệ với nhau. Nếu bạn không thể liên kết chúng, thì có vẻ như bạn có thể sử dụng liên hợp tất cả, trong đó bạn lấy tất cả các giá trị từ table1 trong đó c1 ='1' và liên kết chúng với tất cả các hàng của table2. Nếu cần, bạn chỉ có thể bao gồm các giá trị table2 nếu c1 <> '1'.

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

CẬP NHẬT

Dựa trên dữ liệu mẫu và kết quả mong đợi của bạn, vui lòng sử dụng truy vấn thứ hai ở trên:

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. Xử lý các giá trị NULL khi đọc qua OracleDataReader?

  2. Oracle THỰC HIỆN NGAY LẬP TỨC thành một con trỏ

  3. Kết nối JDBC với cơ sở dữ liệu Oracle bằng Chứng chỉ TLS

  4. ORA-29283:thao tác tệp không hợp lệ ORA-06512:tại SYS.UTL_FILE, dòng 536

  5. Làm thế nào để liệt kê tất cả các bảng trong Oracle