Внутренний запрос не выдает ошибку в 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');

второй стол как

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 ответ

Решение

Это правильное поведение, как указано в стандарте SQL. Внутренний запрос имеет доступ ко всем столбцам внешнего запроса - и потому что test1 имеет столбец с именем key (что, кстати, ужасное имя для столбца) внутренний выбор действителен.

Смотрите эти обсуждения в списке рассылки Postgres:

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

Другие вопросы по тегам