Подтвердить что ты не робот

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

Я читаю SQL-запрос в Redshift и не могу понять последнюю часть:

...
LEFT JOIN (SELECT MIN(modified) AS first_modified FROM user) ue
ON 1=1

Что означает ON 1=1?

4b9b3361

Ответ 1

Он просто выполняет перекрестное соединение, которое выбирает все строки из первой таблицы и все строки из второй таблицы и отображает их как декартово произведение, т.е. со всеми возможностями.

Операторы JOIN (ВЛЕВО, ВНУТРЕННИЙ, ПРАВЫЙ и т.д.) Обычно требуют условия "ON...". Ввод 1 = 1 - это все равно, что сказать "1 = 1 всегда верно, ничего не устранять".

Ответ 2

Намерение является безусловным LEFT JOIN, которое отличается от от CROSS JOIN тем, что возвращаются все строки из левого табличного выражения, даже если в правом табличном выражении нет совпадений - в то время как CROSS JOIN отбрасывает такие строки из результата. Подробнее о соединениях в руководстве.

Тем не менее:

1=1 бессмысленно в Postgres и всех производных, включая Amazon Redshift. Просто используйте true. Это, вероятно, было перенесено из другой СУБД, которая не поддерживает должным образом тип boolean.

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

С другой стороны, LEFT JOIN не имеет смысла для этого конкретного подзапроса с SELECT MIN(modified) FROM user справа, потому что SELECT с агрегатной функцией (min()) и без предложения GROUP BY всегда возвращает ровно одну строку. Этот случай (но не другие случаи, когда не может быть найдена строка) можно упростить до:

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

Ответ 3

Я считаю, что его использовали для подражания декартовому соединению.

Из вашего запроса наименее измененное значение (Оно будет всего одним элементом) будет назначено всем записям левой таблицы.

PS: левое соединение здесь не очень полезно. Возможно также просто использовать внутреннее соединение