sql >> Database >  >> RDS >> Oracle

SQL-query om een ​​rij te retourneren, zelfs als deze niet is gevonden, met ten minste in parameters

U moet de standaard JOIN-syntaxis gaan gebruiken. Behalve dat het leesbaarder is (althans naar mijn mening), beschermt het je ook tegen onbedoelde cartesische joins als je de feitelijke join-voorwaarde in de WHERE-clausule vergeet. Bovendien is het draagbaar in bijna alle DBMS, in tegenstelling tot het onhandige (+) syntaxis gebruikt door Oracle (die ook enkele beperkingen heeft die de JOIN-syntaxis niet heeft)

Hier is de query herschreven met expliciete (in plaats van impliciete) 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'

Bewerken

De ontbrekende join-voorwaarde op od_equipment_type is precies de reden waarom de JOIN-syntaxis de voorkeur heeft. Als de volgkomma in de originele SQL wordt verwijderd, zou de instructie een ongewenste cartesische join creëren die ernstige gevolgen kan hebben voor de server als de betrokken tabellen groot zijn.

Met de JOIN-syntaxis krijgt u altijd een syntaxisfout die dergelijke typefouten voorkomt. Het gebruik van impliciete joins geeft je alleen een foutmelding als je een komma achterlaat in de FROM-lijst, maar nooit als je een join-voorwaarde mist in de WHERE




  1. Een CHECK-beperking maken in SQL Server (T-SQL-voorbeelden)

  2. Galera Cluster Cloud-aanbiedingen vergelijken:deel drie Microsoft Azure

  3. Host mag geen verbinding maken met deze mysql-server bij het maken van een lokale verbinding

  4. Wat zijn de grootste voordelen van het gebruik van INDEXES in mysql?