Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL-Abfrage, um eine Zeile zurückzugeben, auch wenn sie nicht gefunden wird, mit mindestens in Parametern

Sie sollten beginnen, die Standard-JOIN-Syntax zu verwenden. Abgesehen davon, dass es besser lesbar ist (zumindest meiner Meinung nach), schützt es Sie auch vor versehentlichen kartesischen Verknüpfungen, wenn Sie die eigentliche Verknüpfungsbedingung in der WHERE-Klausel vergessen. Außerdem ist es im Gegensatz zum klobigen (+) über fast alle DBMS portierbar Syntax, die von Oracle verwendet wird (die auch einige Einschränkungen hat, die die JOIN-Syntax nicht hat)

Hier ist die neu geschriebene Abfrage mit expliziten (statt impliziten) 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'

Bearbeiten

Die fehlende Join-Bedingung für od_equipment_type Genau aus diesem Grund wird die JOIN-Syntax bevorzugt. Wenn das abschließende Komma in der ursprünglichen SQL entfernt wird, würde die Anweisung einen unerwünschten kartesischen Join erstellen, der schwerwiegende Auswirkungen auf den Server haben könnte, wenn die beteiligten Tabellen groß sind.

Bei der JOIN-Syntax erhalten Sie immer einen Syntaxfehler, der Sie vor solchen Tippfehlern bewahrt. Die Verwendung von impliziten Joins gibt Ihnen nur dann einen Fehler, wenn Sie ein Komma in der FROM-Liste hinterlassen, aber niemals, wenn Sie eine Join-Bedingung in WHERE auslassen