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

implizite innere Verknüpfungen - sind sie gleich?

Ich werde die Frage ansprechen, ob diese Ungleichheiten immer bestehen WAHR. Die Antwort ist "nein", nicht in SQL. In den meisten Fällen sind sie gleichwertig. Das Problem tritt bei der impliziten Typkonvertierung auf.

Insbesondere wenn a.id eine Zahl ist und andere Spalten Zeichenfolgen sind, dann haben Sie die Situation, in der:

1 = '1'        -- true
1 = '1.00'     -- true
'1' = '1.00'   -- false

Sie können dies sehen auf dieser db<>geige. Es wäre trivial, dies mit JOIN einzurichten s, aber da ich keinen Code schreiben werde, der Kommas im FROM enthält Klausel, überlasse ich diese Übung Ihnen.

In der Praxis sollten die für Joins verwendeten IDs vom gleichen Typ sein. Sie können nicht einmal eine Fremdschlüsselbeziehung deklarieren, wenn dies nicht der Fall ist. Abgesehen von dieser bewährten Methode sind die beiden Abfragen nicht automatisch gleichwertig.

Hinweis:Dies wäre genauso wahr, wenn Sie den richtigen, expliziten Standard verwenden würden JOIN Syntax, zu deren Erlernen und ausschließlichen Verwendung ich Sie dringend ermutige.