Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle Insert przez Select z wielu tabel, w których jedna tabela może nie mieć wiersza

W takim przypadku złączenia zewnętrzne nie działają „zgodnie z oczekiwaniami”, ponieważ wyraźnie powiedziałeś firmie Oracle, że chcesz mieć dane tylko wtedy, gdy spełnione są kryteria w tej tabeli. W tym scenariuszu złącze zewnętrzne staje się bezużyteczne.

Obejście

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

[Edytuj]Jeśli oczekujesz wielu wierszy z podselekcji, możesz dodać ROWNUM=1 do każdej klauzuli WHERE LUB użyć zagregowanej wartości, takiej jak MAX lub MIN. To oczywiście może nie być najlepszym rozwiązaniem we wszystkich przypadkach.

[Edytuj] Za komentarz,

  (SELECT account_type_standard_seq.nextval FROM DUAL),

może być po prostu

  account_type_standard_seq.nextval,


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. skuteczny sposób na sprawdzenie, czy istnieje wiersz tabeli

  2. Jak wygenerować GUID w Oracle?

  3. Wyszukiwanie bez rozróżniania wielkości liter w Oracle

  4. Składnia starego łączenia zewnętrznego Oracle — po co umieszczać (+) po prawej stronie znaku równości w lewym sprzężeniu zewnętrznym?

  5. SIGN() Funkcja w Oracle