鉴于这些表:
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 ?
中的所有行你有这样一个有用的查询例子吗?
也许我错过了什么。
答案 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%');
因此,绝对有必要访问外部查询的字段。