sql >> Databasteknik >  >> RDS >> Oracle

SQL-fråga för att returnera en rad även om den inte hittas, med åtminstone i parametrar

Du bör börja använda standard JOIN-syntax. Förutom att den är mer läsbar (åtminstone enligt min mening) skyddar den dig också från oavsiktliga kartesiska anslutningar om du glömmer det faktiska joinvillkoret i WHERE-satsen. Plus att den är portabel över nästan alla DBMS till skillnad från den klumpiga (+) syntax som används av Oracle (som också har vissa begränsningar som JOIN-syntaxen inte har)

Här är frågan omskriven med explicita (istället för implicita) joins:

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'

Redigera

Det saknade anslutningsvillkoret på od_equipment_type är precis anledningen till att JOIN-syntaxen är att föredra. Om det avslutande kommatecken i den ursprungliga SQL-koden tas bort, skulle satsen skapa en oönskad kartesisk koppling som kan ha en allvarlig inverkan på servern om de inblandade tabellerna är stora.

Med JOIN-syntaxen får du alltid ett syntaxfel som hindrar dig från sådana stavfel. Att använda implicita sammanfogningar ger dig bara ett fel när du lämnar ett kommatecken i FROM-listan, men aldrig om du missar ett sammanfogningsvillkor i WHERE




  1. SQL Konsekutiva poster med antal

  2. Inget lösenord tillhandahålls / Positionsparameter hittades inte PostgreSQL - Powershell

  3. Multipel databaskonfiguration för Spring Data JPA 2.0.9 Release

  4. Utforska de olika sätten att kryptera dina MariaDB-data