sql >> Database >  >> RDS >> Oracle

Oracle Insert via Selecteer uit meerdere tabellen waarbij één tabel mogelijk geen rij heeft

Outter-joins werken in dat geval niet "zoals verwacht", omdat u Oracle expliciet hebt verteld dat u alleen gegevens wilt als die criteria in die tabel overeenkomen. In dat scenario wordt de buitenste join onbruikbaar gemaakt.

Een tijdelijke oplossing

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

[Bewerken]Als u meerdere rijen verwacht van een subselectie, kunt u ROWNUM=1 toevoegen aan elke where-clausule OF een aggregaat zoals MAX of MIN gebruiken. Dit is natuurlijk niet in alle gevallen de beste oplossing.

[Bewerken] Per reactie,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

kan gewoon zijn

  account_type_standard_seq.nextval,


  1. Oracle JDBC :ongeldige gebruikersnaam/wachtwoord (ora-01017)

  2. Optimaliseer de GROUP BY-query om de laatste rij per gebruiker op te halen

  3. Hoe de sortering van een kolom in MySQL te tonen

  4. Kolom toevoegen of verwijderen met behulp van GUI in SQL Server - SQL Server / T-SQL-zelfstudie, deel 39