Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle Inserisci tramite Seleziona da più tabelle in cui una tabella potrebbe non avere una riga

I join esterni non funzionano "come previsto" in quel caso perché hai esplicitamente detto a Oracle che desideri i dati solo se i criteri su quella tabella corrispondono. In quello scenario, l'outer join è reso inutile.

Una soluzione

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 = ?)
)

[Modifica]Se prevedi più righe da una sottoselezione, puoi aggiungere ROWNUM=1 a ciascuna clausola dove OPPURE utilizzare un aggregato come MAX o MIN. Questa ovviamente potrebbe non essere la soluzione migliore per tutti i casi.

[Modifica] Per commento,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

può essere solo

  account_type_standard_seq.nextval,