RedshiftでSQLクエリを読んでいますが、最後の部分を理解できません:
...
LEFT JOIN (SELECT MIN(modified) AS first_modified FROM user) ue
ON 1=1
ON 1=1
はどういう意味ですか?
単純にクロスジョインを行い、最初のテーブルからすべての行を選択し、2番目のテーブルからすべての行を選択し、デカルト積として表示します。
JOIN(LEFT、INNER、RIGHTなど)ステートメントには、通常、「ON ...」条件が必要です。1= 1を入力することは、「1 = 1は常に真で、何も削除しないでください」と言うようなものです。
意図はunconditional_LEFT JOIN
_であり、これはdifferent_CROSS JOIN
_から、右のテーブル式に一致がない場合でも、左のテーブル式のすべての行が返されます-_CROSS JOIN
_は結果からそのような行を削除します。 マニュアルの結合の詳細。
しかしながら:
_1=1
_はPostgresでは無意味であり、Amazon Redshiftを含む すべての派生物 です。 true
を使用してください。これは、おそらく boolean
タイプを適切にサポートしていない別のRDBMSから引き継がれています。
_... LEFT JOIN (SELECT ...) ue ON true
_
繰り返しますが、_LEFT JOIN
_は、右側にSELECT MIN(modified) FROM user
を持つこの特定のサブクエリには意味がありません。これは、集約関数(min()
)があり、_GROUP BY
_句がないSELECT
が常に1行を返すためです。このケース(ただし、no rowが見つからない他のケースは除く)は、次のように簡略化できます。
_... CROSS JOIN (SELECT MIN(modified) AS first_modified FROM user) ue
_
デカルト結合をエミュレートするために使用されると思います。
クエリから、最も変更されていない値(1つの要素のみになります)が左側のテーブルのすべてのレコードに割り当てられます。
[〜#〜] ps [〜#〜]:左結合はここではあまり役に立ちません。内部結合を使用するだけでなく