존재하지 않는 열을 참조하므로 실제로 실패 할 것으로 예상되는 하위 쿼리는 하위 쿼리에서 참조되는 테이블의 모든 행을 반환합니다. postgresql 또는 postgresql 버그에서 예상되는 동작입니까? postgresql 하위 쿼리가 잘못된 열에서 실패 할 때 행을 반환합니다.
문제를 시뮬레이션하려면 하위 쿼리 참조가 column_b을 사용해야 테이블 zz_temp_01에서 column_c 이후 이create table zz_temp_01
(
column_a varchar(20),
column_b int
)
;
create table zz_temp_02
(
column_c int,
column_d varchar(20)
)
;
insert into zz_temp_01
values
('test1', 1),
('test2', 2)
;
insert into zz_temp_02
values
(1, 'Monday'),
(2, 'Tuesday'),
(3, 'Wednesday'),
(4, 'Thursday'),
(5, 'Friday'),
(6, 'Saturday'),
(7, 'Sunday')
;
select * from zz_temp_02
where column_c in
(select column_c from zz_temp_01)
;
이 쿼리는 분명 잘못된 것입니다. "select column_c from zz_temp_01"을 실행하면 오류가 발생합니다. "column_c"열이 없습니다. 그러나 전체 쿼리가 실행되면 결과는 다음과 같습니다.
1;"Monday"
2;"Tuesday"
3;"Wednesday"
4;"Thursday"
5;"Friday"
6;"Saturday"
7;"Sunday"
이는 전체 zz_temp_02 테이블입니다. 나는 쿼리가 오류 조건에서 실패하거나 적어도 행을 반환하지 않을 것으로 예상했을 것이다. 에 column_c가 을 (zz_temp_01에서 column_B 해당) 여기서
아니요. 맞습니다. 이것은 식별자의 가시성이 SQL 표준에서 정의되는 방식입니다. –
여기를 참조하십시오 : https://www.postgresql.org/message-id/flat/20151030003924.3017.23003%40wrigleys.postgresql.org#[email protected] 및 여기 : https : //www.postgresql. org/message-id/flat/20160714135233.1410.92538%40wrigleys.postgresql.org#[email protected] –