sql >> Databáze >  >> RDS >> Oracle

Oracle Vložit přes Výběr z více tabulek, kde jedna tabulka nemusí mít řádek

Vnější spojení v takovém případě nefungují „jak se očekávalo“, protože jste společnosti Oracle výslovně řekli, že chcete data pouze v případě, že tato kritéria v této tabulce odpovídají. V tomto scénáři je vnější spojení nepoužitelné.

Řešení

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

[Upravit]Pokud očekáváte více řádků z dílčího výběru, můžete přidat ROWNUM=1 ke každé klauzuli where NEBO použít agregaci, například MAX nebo MIN. To samozřejmě nemusí být nejlepší řešení pro všechny případy.

[Upravit] Za komentář,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

může být jen

  account_type_standard_seq.nextval,


  1. SQL Server Query - skupinové násobení

  2. Syntaxe vnějšího spojení Oracle ve starém stylu – Proč umístit (+) na pravou stranu znaménka rovná se v levém vnějším spojení?

  3. Konektor Access Dataverse je nyní k dispozici k testování

  4. Výpočet kumulativního součtu v PostgreSQL