为什么我可以在SQL中引用外部查询中的字段

时间:2012-12-14 10:27:47

标签: sql

鉴于这些表:

create temporary table a(pid integer, cid integer);
create temporary table b(id integer, code varchar);

这样可行,但会返回错误的结果:

select pid 
from a 
where cid in (select cid from b where code like 'AE%')

我刚刚遇到了一个类似于我使用错误字段的查询,并且令我惊讶的是该查询甚至可以正常工作。这样的查询是否只返回表 a

中的所有行

你有这样一个有用的查询例子吗?

也许我错过了什么。

1 个答案:

答案 0 :(得分:1)

你经常需要内部查询的where子句中外部查询的字段:

 select * from a
    where exists ( select 1 from b where id = cid );

 select * from a
    where 'HELLO' in (select code from b where id = cid );

我们还可以构造一些示例,其中外部字段(种类)在select子句中很有用:

 select * from a
    where 1 = any (select id-cid from b where code like 'HE%');

因此,绝对有必要访问外部查询的字段。