内部查询不会在 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
有一种情况,我们从内部查询中检索一些结果并使用该结果执行一些操作
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