是否可以使用 Postgresql 中的连接查询所有相关的子查询?

Can all correlated sub queries be queried using joins in Postgresql?

所以说我有一个table

Dress(Dress_id, Colour, Value) 和另一个 table

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);

基本上我想return借出的衣服的颜色和价值。我也这样查询过:

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

两者都给出相同的输出,所以我想知道是否所有相关的子查询都可以变成具有连接的等效查询?

谢谢。

许多相关的子查询可以表示为JOINs。其实相关子查询就是一般意义上的一种join。

但如果您询问 "simple" JOIN 运算符查询是否始终可用,答案是 "no"。一个非常简单的例子是:

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

当然,这个可以不使用相关子查询来表达。但它需要不止一次 JOIN 操作。