内部查询不在postgres中抛出错误

时间:2015-06-11 05:43:54

标签: oracle postgresql inner-query

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

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"

1 个答案:

答案 0 :(得分:2)

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

在Postgres邮件列表上查看这些讨论:

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