sql >> Databasteknik >  >> RDS >> PostgreSQL

JOIN (VÄLJ ... ) ue PÅ 1=1?

Avsikten är en ovillkorlig LEFT JOIN , vilket är annat från en CROSS JOIN genom att alla rader från det vänstra tabelluttrycket returneras, även om det inte finns någon matchning i det högra tabelluttrycket - medan en CROSS JOIN tar bort sådana rader från resultatet. Mer om sammanfogningar i manualen.

Men:

1=1 är meningslöst i Postgres och alla derivat inklusive Amazon Redshift. Använd bara true . Detta har förmodligen överförts från ett annat RDBMS som inte stöder boolean skriv korrekt.

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

Sedan igen, LEFT JOIN är meningslöst för just den här underfrågan med SELECT MIN(modified) FROM user till höger, eftersom en SELECT med en aggregerad funktion (min() ) och ingen GROUP BY klausul returnerar alltid exakt en rad. Detta fall (men inte andra fall där ingen rad kan hittas) kan förenklas till:

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


  1. Inbäddade PostgreSQL för Java JUnit-tester

  2. MySQL ENUM-typ kontra sammanfogningstabeller

  3. Postgresql skapar inte db med "createdb" som superanvändare, men matar inte ut fel

  4. Välj allt före eller efter en viss karaktär i MariaDB