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