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

2番目のテーブル

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で結果を出しています

しかし、オラクルで実行すると、次のようなエラーが発生します

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 に答える