2010-04-24 83 views
1

在SQL中,我们总是可以将内部连接语句写为主查询和子查询吗?在SQL中,我们是否可以始终将内部联接语句编写为主查询和子查询?

例如,

select * from gifts g where g.giftID in (select giftID from sentGifts); 

可以做一个连接,并显示在sentGifts表送礼物,但它无法显示sentTime因为那是子查询里面?

+3

尝试这样做,当你上多列加入,你的数据库引擎不支持的元组产生。 – 2010-04-24 23:27:55

+0

重复:http://stackoverflow.com/questions/2676874/correlated-query-subquery-vs-join-query – 2010-04-25 00:27:02

回答

4

不,您只能使用该条件,如果条件是一个单一的值。

你不能这样做,像查询:

select * 
from gifts g 
inner join sentGifts s on s.giftType = g.giftType and s.giftDate = g.giftDate 
3

不,您不能重写所有INNER JOIN。

有时你的内部连接条件会涉及多个列,然后IN不一定会工作。

此外,有时内部连接条件将是一个范围或更复杂的表达式,其中此查询/子查询技术根本不起作用,例如:查找重叠区间。