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

Query SQL per restituire una riga anche se non trovata, con almeno nei parametri

Dovresti iniziare a usare la sintassi JOIN standard. Oltre ad essere più leggibile (almeno secondo me) ti protegge anche da join cartesiani accidentali se dimentichi la condizione di join effettiva nella clausola WHERE. Inoltre è portabile su quasi tutti i DBMS al contrario del goffo (+) sintassi utilizzata da Oracle (che ha anche alcune limitazioni che la sintassi JOIN non ha)

Ecco la query riscritta utilizzando join espliciti (anziché impliciti):

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'

Modifica

La condizione di unione mancante su od_equipment_type è esattamente il motivo per cui si preferisce la sintassi JOIN. Se la virgola finale nell'SQL originale viene rimossa, l'istruzione creerebbe un join cartesiano indesiderato che potrebbe avere un grave impatto sul server se le tabelle coinvolte sono grandi.

Con la sintassi JOIN otterrai sempre un errore di sintassi che ti impedisce di tali errori di battitura. L'uso dei join impliciti ti darà un errore solo quando lasci una virgola nell'elenco FROM, ma mai se perdi una condizione di join in WHERE