Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Consulta SQL para retornar uma linha mesmo que não seja encontrada, com pelo menos nos parâmetros


Você deve começar a usar a sintaxe JOIN padrão. Além de ser mais legível (pelo menos na minha opinião), também protege você de junções cartesianas acidentais se você esquecer a condição de junção real na cláusula WHERE. Além disso, é portátil em quase todos os DBMS, em oposição ao desajeitado (+) sintaxe usada pelo Oracle (que também possui algumas limitações que a sintaxe JOIN não possui)

Aqui está a consulta reescrita usando junções explícitas (em vez 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


A condição de junção ausente em od_equipment_type é exatamente a razão pela qual a sintaxe JOIN é preferida. Se a vírgula final no SQL original for removida, a instrução criará uma junção cartesiana indesejada que pode ter um impacto severo no servidor se as tabelas envolvidas forem grandes.

Com a sintaxe JOIN, você sempre obterá um erro de sintaxe que evita esses erros de digitação. O uso de junções implícitas só causará um erro quando você deixar uma vírgula na lista FROM, mas nunca se você perder uma condição de junção no WHERE