Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle Insert via Select à partir de plusieurs tables où une table peut ne pas avoir de ligne

Les jointures externes ne fonctionnent pas "comme prévu" dans ce cas, car vous avez explicitement indiqué à Oracle que vous ne voulez des données que si les critères de cette table correspondent. Dans ce scénario, la jointure externe est rendue inutile.

Une solution de contournement

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

[Modifier] Si vous attendez plusieurs lignes d'une sous-sélection, vous pouvez ajouter ROWNUM=1 à chaque clause where OU utiliser un agrégat tel que MAX ou MIN. Bien sûr, ce n'est peut-être pas la meilleure solution dans tous les cas.

[Modifier] Par commentaire,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

peut être juste

  account_type_standard_seq.nextval,