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

dwa lewe sprzężenia zewnętrzne nie działają Oracle sql

Wygląda na to, że problem polega na tym, że nie używasz (+) dla Twojego language_id sprawdza.
Twoja tabela jest połączona na zewnątrz, więc language_id jest NULL gdy nie znaleziono żadnego rekordu, ale sprawdzasz, czy language_id = 2 , ale ? language_id jest NULL .

Nie widzę też, gdzie używasz wyników z a_tl lub b_tl , domyślasz się, że to tylko problem z Twoim postem, a nie z pierwotnym zapytaniem?

Należy jednak używać jawnych złączeń zamiast starej składni. Gdy już się do tego przyzwyczaisz, będzie to o wiele łatwiejsze do odczytania i zrozumienia.
Twoje zapytanie może również skorzystać z użycia COALESCE (lub NVL jeśli chcesz):

SELECT COALESCE( a_tl.a_disp_name, a.a_name ) AS a_name,
       COALESCE( b_tl.b_disp_name, b.b_name ) AS b_name,
       a.a_id,
       b.b_id
FROM a
JOIN b ON ( b.b_id = a.a_id )
LEFT JOIN a_tl ON ( a_tl.a_id = a.a_id AND a_tl.language_id = 2 )
LEFT JOIN b_tl ON ( b_tl.b_id = b.b_id AND b_tl.language_id = 2 )

Mam nadzieję, że dobrze odpowiedziałem na Twoje pytanie, zapytaj, czy to nie działa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwrócić tymczasową instancję CLOB z funkcji przechowywanej w Pl/SQL?

  2. Nie znaleziono funkcji OCI8 uruchamianych przez Apache z php5

  3. Jak nadać unikalne ograniczenie kombinacji kolumn w Oracle?

  4. Korzystanie z kolumny Oracle XMLType w trybie hibernacji

  5. Jak wybrać i zoptymalizować indeksy oracle?