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

Oracle Insert via Select dari beberapa tabel di mana satu tabel mungkin tidak memiliki baris

Gabungan luar tidak berfungsi "seperti yang diharapkan" dalam kasus itu karena Anda telah secara eksplisit memberi tahu Oracle bahwa Anda hanya menginginkan data jika kriteria pada tabel itu cocok. Dalam skenario itu, gabungan luar menjadi tidak berguna.

Solusi

INSERT INTO account_type_standard 
  (account_type_Standard_id, tax_status_id, recipient_id) 
VALUES( 
  (SELECT account_type_standard_seq.nextval FROM DUAL),
  (SELECT tax_status_id FROM tax_status WHERE tax_status_code = ?), 
  (SELECT recipient_id FROM recipient WHERE recipient_code = ?)
)

[Sunting]Jika Anda mengharapkan beberapa baris dari sub-pilihan, Anda dapat menambahkan ROWNUM=1 ke masing-masing di mana klausa OR menggunakan agregat seperti MAX atau MIN. Ini tentu saja bukan solusi terbaik untuk semua kasus.

[Sunting] Per komentar,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

bisa saja

  account_type_standard_seq.nextval,


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Membandingkan Dua Objek Database di Oracle?

  2. Gabungkan/Gabungkan Beberapa File PDF menjadi Satu PDF di Oracle Menggunakan Paket PLPDF_TOOLKIT PL/SQL

  3. Hasilkan Prosedur PL/SQL Online untuk Mengimpor Data di Tabel Oracle

  4. Menyalin baris dalam tabel yang sama tanpa harus mengetikkan 50+ nama kolom (sambil mengubah 2 kolom)

  5. Mencegah Drop Table Pada Skema Target Di Oracle Streams