Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana saya bisa mengatasi kesalahan ORA-01427 (Subquery baris tunggal mengembalikan lebih dari satu baris)?

Anda mendapatkan kesalahan karena terdapat lebih dari satu baris di db2.CENSUS untuk setidaknya nilai uid . (Mungkin ada lebih banyak.) Anda dapat mengetahui nilai mana dari uid menyebabkan masalah dengan melakukan hal berikut:

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

Pada saat itu Anda dapat melakukan beberapa hal. Anda dapat menghapus baris tambahan (mungkin tidak banyak dan Anda tetap tidak menginginkannya) dan memperbarui seperti pada kueri asli Anda, atau Anda dapat menggunakan agregasi dalam subkueri yang Anda gunakan untuk memperbarui, mis.:

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';

Selain itu, dengan kueri Anda seperti di atas, jika tidak ada nilai notes yang sesuai di db2.CENSUS untuk beberapa nilai db1.CENSUS.uid , db1.CENSUS.notes akan disetel ke NULL . Mungkin itu perilaku yang Anda inginkan? Jika tidak, Anda akan menginginkan sesuatu seperti berikut:

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. Saat Ini Menjalankan Nama Prosedur dalam Paket

  2. Oracle PLSQL mengembalikan satu tipe baris

  3. GROUP BY / kebingungan fungsi agregat dalam SQL

  4. Masalah dalam pembuatan tabel dinamis

  5. masukkan ke... pilih ... dengan subquery atau tanpa urutan kolom