sql >> Database >  >> RDS >> PostgreSQL

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

De bedoeling is een onvoorwaardelijk LEFT JOIN , wat anders . is van een CROSS JOIN in die zin dat alle rijen van de linkertabeluitdrukking worden geretourneerd, zelfs als er geen overeenkomst is in de rechtertabeluitdrukking - terwijl een CROSS JOIN laat dergelijke rijen uit het resultaat vallen. Meer over joins in de handleiding.

Maar:

1=1 is zinloos in Postgres en alle derivaten, inclusief Amazon Redshift. Gebruik gewoon true . Dit is waarschijnlijk overgenomen van een ander RDBMS dat de boolean niet ondersteunt typ correct.

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

Dan nogmaals, LEFT JOIN is zinloos voor deze specifieke subquery met SELECT MIN(modified) FROM user aan de rechterkant, omdat een SELECT met een aggregatiefunctie (min() ) en geen GROUP BY clausule geeft altijd precies één rij terug. Dit geval (maar niet in andere gevallen waarin geen rij kan worden gevonden) kan worden vereenvoudigd tot:

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


  1. Voordelen van NoSQL-databases – Alles wat u moet weten

  2. Verbind ODBC-toepassingen op Windows met SugarCRM

  3. bestellen op newid() - hoe werkt het?

  4. Hoe kan ik een postgres-databasedump in platte tekst op heroku krijgen?