0

有一种情况是我们从内部查询中检索一些结果并使用结果来执行一些操作

create table test1(key integer,value varchar)

insert into test1 values(1,'value 1');
insert into test1 values(2,'value 2');
insert into test1 values(3,'value 3');

第二张表为

create table test2(key1 integer, valuein varchar);


insert into test2 values (2,'value inside is 2');
insert into test2 values (4,'value inside is 4');
insert into test2 values (5,'value inside is 5'); 

下面的查询给出了结果,但在我看来它应该给出一个错误

select * from test1 where key in 
(select key from test2)

因为 test2 表中不存在键列。

但它在 postgres 中给出了结果

但是当在 oracle 中运行时,它会给出错误

ORA-00904: "KEY": invalid identifier
00904. 00000 -  "%s: invalid identifier"
4

1 回答 1

2

这是 SQL 标准中指定的正确行为。内部查询可以访问外部查询的所有列 - 因为 test1 有一个名为的列key(顺便说一句,这是一个可怕的列名称),所以内部选择是有效的。

请参阅 Postgres 邮件列表中的这些讨论:

http://postgresql.nabble.com/BUG-13336-Unexpected-result-from-invalid-query-td5850684.html

于 2015-06-11T05:47:35.807 回答