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

Làm cách nào để giải quyết lỗi ORA-01427 (Truy vấn con một hàng trả về nhiều hơn một hàng)?

Bạn đang gặp lỗi vì tồn tại nhiều hơn một hàng trong db2.CENSUS cho giá trị ít nhất là uid . (Có thể có nhiều hơn.) Bạn có thể tìm ra các giá trị của uid đang gây ra sự cố bằng cách làm như sau:

SELECT uid, COUNT(*)
  FROM db2.census
 GROUP BY uid
HAVING COUNT(*) > 1;

Tại thời điểm đó, bạn có thể làm một số điều. Bạn có thể xóa các hàng bổ sung (có thể không có nhiều và bạn không muốn chúng) và cập nhật như trong truy vấn ban đầu của mình hoặc bạn có thể sử dụng tính năng tổng hợp trong truy vấn con mà bạn đang sử dụng để cập nhật, ví dụ :

update db1.CENSUS set (notes)
=
(
        select MAX(notes)
        from db2.CENSUS cen
        where  db1.CENSUS.uid = cen.uid

)
where headcount_ind = 'Y' and capture_FY = '2015';

Ngoài ra, với truy vấn của bạn theo cách trên, nếu không có giá trị tương ứng của notes trong db2.CENSUS cho một số giá trị của db1.CENSUS.uid , db1.CENSUS.notes sẽ được đặt thành NULL . Có lẽ đó là hành vi bạn muốn? Nếu không, bạn sẽ muốn một cái gì đó giống như sau:

UPDATE db1.census c1
   SET c1.notes = ( SELECT max(c2.notes)
                      FROM db2.census c2
                     WHERE c2.uid = c1.uid )
 WHERE c1.headcount_ind = 'Y'
   AND c1.capture_FY = '2015'
   AND EXISTS ( SELECT 1 FROM db2.census c2
                 WHERE c2.uid = c1.uid );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để gọi một hàm Oracle với Con trỏ tham chiếu là Tham số ngoài từ C #?

  2. Trạng thái khách hàng tức thì của Oracle

  3. Làm thế nào để cấu hình DbContext để hoạt động với Oracle ODP.Net và EF CodeFirst?

  4. Cách lấy hàng cuối cùng của bảng Oracle

  5. Oracle DB - Đặt Số đầu vào thành độ dài chính xác