PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Spielt die Reihenfolge der Tabellen in einem Join eine Rolle, wenn linke (äußere) Joins verwendet werden?

Es ist dasselbe, aber es ist höllisch mehrdeutig mit dem impliziten CROSS JOINs. Verwenden Sie explizite JOINS.

Wenn Sie sich der WHERE-Klausel anschließen, dann können die Ergebnisse angezeigt werden unterscheiden sich, weil Joins und Filter verwechselt werden.

SELECT ....
  FROM apples a
       JOIN
       bananas b ON ...
       JOIN 
       oranges o ON ...
       LEFT JOIN
       kiwis k ON k.orange_id = o.id
 WHERE (filters only)

Hinweise:

  • INNER JOINS und CROSS JOINS sind kommutativ und assoziativ:Die Reihenfolge spielt normalerweise keine Rolle.
  • OUTER JOINS sind nicht die, die Sie identifiziert haben
  • SQL ist deklarativ:Sie sagen dem Optimierer, was Sie wollen, nicht, wie es zu tun ist. Dadurch entfallen Überlegungen zur JOIN-Reihenfolge (vorbehaltlich der vorherigen 2 Punkte)