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

Inner query not throwing error in postgres

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

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');

秒 table 作为

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 中不存在关键列 table。

但它在 postgres 中给出了结果

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

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

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

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

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