sql >> Database teknologi >  >> RDS >> Oracle

SQL-forespørgsel for at returnere en række, selvom den ikke findes, med mindst i parametre

Du bør begynde at bruge standard JOIN-syntaks. Udover at være mere læsbar (i hvert fald efter min mening) beskytter den dig også mod utilsigtede kartesiske joinforbindelser, hvis du glemmer den faktiske join-betingelse i WHERE-klausulen. Derudover er den bærbar på tværs af næsten alle DBMS i modsætning til den klodsede (+) syntaks brugt af Oracle (som også har nogle begrænsninger, som JOIN-syntaksen ikke har)

Her er forespørgslen omskrevet ved hjælp af eksplicitte (i stedet for implicitte) 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'

Rediger

Den manglende forbindelsestilstand på od_equipment_type er netop grunden til, at JOIN-syntaksen foretrækkes. Hvis det efterfølgende komma i den originale SQL fjernes, ville sætningen skabe en uønsket kartesisk join, som kan have en alvorlig indvirkning på serveren, hvis de involverede tabeller er store.

Med JOIN-syntaksen vil du altid få en syntaksfejl, som forhindrer dig i sådanne tastefejl. Brug af implicitte joinforbindelser vil kun give dig en fejl, når du efterlader et komma i FROM-listen, men aldrig hvis du går glip af en join-betingelse i WHERE




  1. 2 måder at få referatet fra en DateTime-værdi i Oracle Database

  2. Søg efter ordrer, der har to produkter, en med specifik reference, en anden med specifik beskrivelse

  3. Få Max værdi og tilsvarende kolonne

  4. CakePHP / Mysql Indsæt UTF-8