Можно ли запрашивать все связанные подзапросы с помощью объединений в Postgresql? - PullRequest
0 голосов
/ 01 декабря 2019

Скажем, у меня есть таблица

Dress(Dress_id, Colour, Value) и другая таблица

On_Loan(Dress_id, Start_date, End_date)

, и у меня есть этот запрос, но я не уверен, что этокоррелированный подзапрос или нет

SELECT D.COLOUR,D.VALUE FROM DRESS WHERE D.DRESS_ID = (SELECT ON_LOAN.DRESS_ID FROM ON_LOAN WHERE ON_LOAN.DRESS_ID = D.DRESS_ID);

По сути, я хочу вернуть цвет и значения платьев, которые одолжены. Я также запрашивал это так:

SELECT COLOUR,VALUE FROM DRESS INNER JOIN ON ON_LOAN WHERE DRESS.DRESS_ID = ON_LOAN.DRESS_ID);

Оба из них дают одинаковый вывод, поэтому мне интересно, можно ли превратить все коррелированные подзапросы в эквивалентные запросы с объединениями?

Спасибо.

1 Ответ

0 голосов
/ 01 декабря 2019

Многие коррелированные подзапросы могут быть представлены как JOIN с. Фактически, коррелированные подзапросы являются типом объединения в общем смысле.

Но если вы спрашиваете, всегда ли доступен «простой» операторный запрос JOIN, ответ будет «нет». Довольно простой пример:

select t.*,
       (select tt.x
        from tt
        where tt.y = t.y
        order by tt.z
        limit 1
       ) as z
from t;

Конечно, этот можно выразить без использования коррелированного подзапроса. Но для этого требуется более одной JOIN операции.

...