Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle Insert via Select from multiple tables, wobei eine Tabelle möglicherweise keine Zeile enthält

Outter Joins funktionieren in diesem Fall nicht "wie erwartet", da Sie Oracle ausdrücklich mitgeteilt haben, dass Sie nur Daten wünschen, wenn diese Kriterien für diese Tabelle übereinstimmen. In diesem Szenario wird der äußere Join unbrauchbar.

Eine Problemumgehung

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

[Bearbeiten] Wenn Sie mehrere Zeilen von einer Unterauswahl erwarten, können Sie ROWNUM=1 zu jeder where-Klausel hinzufügen ODER ein Aggregat wie MAX oder MIN verwenden. Dies ist natürlich nicht in allen Fällen die beste Lösung.

[Bearbeiten] Pro Kommentar,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

kann nur

sein
  account_type_standard_seq.nextval,