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

Zapytanie SQL zwracające wiersz, nawet jeśli nie zostało znalezione, przynajmniej z parametrami

Powinieneś zacząć używać standardowej składni JOIN. Poza tym, że jest bardziej czytelny (przynajmniej moim zdaniem), chroni cię również przed przypadkowymi złączeniami kartezjańskimi, jeśli zapomnisz rzeczywisty warunek złączenia w klauzuli WHERE. Dodatkowo jest przenośny w prawie wszystkich DBMS, w przeciwieństwie do niezgrabnego (+) składnia używana przez Oracle (która ma również pewne ograniczenia, których nie ma składnia JOIN)

Oto zapytanie przepisane przy użyciu jawnych (zamiast niejawnych) złączeń:

SELECT DISTINCT ope.ope_operationid,
       ser.ser_code,
       opt.opt_code,
       ost.ost_code
FROM od_operation ope, 
   LEFT JOIN od_service_type ser ON ope.ser_id = ser.ser_id
   LEFT JOIN od_operation_type opt ON opt.opt_id = ope.opt_id
   LEFT JOIN od_status_type ost ON ost.ost_id = ope.ost_id
   LEFT JOIN od_equipment_type eqt ON ????????
WHERE ope.opt_id = 3781
AND   ope.ope_operationid = 'LAA351BP'

Edytuj

Brakujący warunek przyłączenia na od_equipment_type jest dokładnie powodem, dla którego preferowana jest składnia JOIN. Jeśli końcowy przecinek z oryginalnego kodu SQL zostanie usunięty, instrukcja utworzy niechciane sprzężenie kartezjańskie, które może mieć poważny wpływ na serwer, jeśli dane tabele są duże.

Dzięki składni JOIN zawsze otrzymasz błąd składni, który zapobiega takim literówkom. Użycie niejawnych złączeń spowoduje błąd tylko wtedy, gdy zostawisz przecinek na liście FROM, ale nigdy, jeśli przegapisz warunek złączenia w WHERE




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz rekord w maksymalnym dniu każdego miesiąca

  2. Pula połączeń Tomcat jdbc - wycofanie porzuconej transakcji

  3. Pierwsze kroki z Oracle Application Express-APEX

  4. Usuń tabelę z bazy danych Oracle, jeśli tabela istnieje w instrukcji sql

  5. Błąd podczas tworzenia widoku w Oracle DB