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

JOIN (SELECT ... ) ue ON 1=1?

Die Absicht ist eine bedingungslose LEFT JOIN , was anders ist aus einem CROSS JOIN , dass alle Zeilen aus dem linken Tabellenausdruck zurückgegeben werden, auch wenn es keine Übereinstimmung im rechten Tabellenausdruck gibt - während ein CROSS JOIN löscht solche Zeilen aus dem Ergebnis. Mehr über Joins im Handbuch.

Allerdings:

1=1 ist sinnlos in Postgres und allen Derivaten einschließlich Amazon Redshift. Verwenden Sie einfach true . Dies wurde wahrscheinlich von einem anderen RDBMS übernommen, das boolean nicht unterstützt richtig eingeben.

... LEFT JOIN (SELECT  ...) ue ON true

Dann wieder LEFT JOIN ist für diese spezielle Unterabfrage mit SELECT MIN(modified) FROM user sinnlos rechts, weil ein SELECT mit einer Aggregatfunktion (min() ) und kein GROUP BY -Klausel gibt immer genau eine Zeile zurück. Dieser Fall (aber keine anderen Fälle, in denen keine Zeile gefunden werden) kann vereinfacht werden zu:

... CROSS JOIN (SELECT MIN(modified) AS first_modified FROM user) ue