sql >> Base de Datos >  >> RDS >> Oracle

Consulta SQL para devolver una fila incluso si no se encuentra, con al menos en parámetros

Debe comenzar a usar la sintaxis estándar de JOIN. Además de ser más legible (al menos en mi opinión), también lo protege de uniones cartesianas accidentales si olvida la condición de unión real en la cláusula WHERE. Además, es portátil en casi todos los DBMS a diferencia del torpe (+) sintaxis utilizada por Oracle (que también tiene algunas limitaciones que la sintaxis JOIN no tiene)

Aquí está la consulta reescrita usando uniones explícitas (en lugar de implícitas):

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'

Editar

Falta la condición de unión en od_equipment_type es exactamente la razón por la que se prefiere la sintaxis JOIN. Si se elimina la coma final en el SQL original, la declaración crearía una unión cartesiana no deseada que podría tener un impacto severo en el servidor si las tablas involucradas son grandes.

Con la sintaxis JOIN, siempre obtendrá un error de sintaxis que le impide cometer tales errores tipográficos. El uso de uniones implícitas solo le dará un error cuando deje una coma en la lista DESDE, pero nunca si pierde una condición de unión en WHERE