Oracle
 sql >> Base de données >  >> RDS >> Oracle

Requête SQL pour retourner une ligne même si elle n'est pas trouvée, avec au moins in paramètres

Vous devriez commencer à utiliser la syntaxe JOIN standard. En plus d'être plus lisible (du moins à mon avis), il vous protège également des jointures cartésiennes accidentelles si vous oubliez la condition de jointure réelle dans la clause WHERE. De plus, il est portable sur presque tous les SGBD, par opposition à l'encombrant (+) syntaxe utilisée par Oracle (qui a également certaines limitations que la syntaxe JOIN n'a pas)

Voici la requête réécrite à l'aide de jointures explicites (au lieu d'implicites) :

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'

Modifier

La condition de jointure manquante sur od_equipment_type est exactement la raison pour laquelle la syntaxe JOIN est préférée. Si la virgule de fin dans le SQL d'origine est supprimée, l'instruction créerait une jointure cartésienne indésirable qui pourrait avoir un impact grave sur le serveur si les tables impliquées sont volumineuses.

Avec la syntaxe JOIN, vous obtiendrez toujours une erreur de syntaxe qui vous empêchera de telles fautes de frappe. L'utilisation de jointures implicites ne vous donnera une erreur que lorsque vous laissez une virgule dans la liste FROM, mais jamais si vous manquez une condition de jointure dans WHERE