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

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

L'intention est un inconditionnel LEFT JOIN , qui est différent à partir d'un CROSS JOIN en ce que toutes les lignes de l'expression de table de gauche sont renvoyées, même s'il n'y a pas de correspondance dans l'expression de table de droite - alors qu'un CROSS JOIN supprime ces lignes du résultat. Plus d'informations sur les jointures dans le manuel.

Cependant :

1=1 est inutile dans Postgres et tous les dérivés, y compris Amazon Redshift. Utilisez simplement true . Cela a probablement été repris d'un autre SGBDR qui ne prend pas en charge le boolean tapez correctement.

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

Encore une fois, LEFT JOIN est inutile pour cette sous-requête particulière avec SELECT MIN(modified) FROM user à droite, car un SELECT avec une fonction d'agrégation (min() ) et pas de GROUP BY clause renvoie toujours exactement une ligne. Ce cas (mais pas les autres cas où aucune ligne peut être trouvé) peut être simplifié en :

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