假设我有一个表
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);
两者都提供相同的输出,所以我想知道是否所有相关的子查询都可以转换为带有连接的等效查询?
谢谢。
许多相关的子查询可以表示为JOIN
s。 事实上,相关子查询是一般意义上的一种连接。
但是,如果您询问"简单"JOIN
运算符查询是否始终可用,则答案是否定的。 一个非常简单的例子是:
select t.*,
(select tt.x
from tt
where tt.y = t.y
order by tt.z
limit 1
) as z
from t;
当然,这可以不使用相关子查询来表示。 但它需要的不仅仅是一次JOIN
操作。