Почему ошибочный внутренний запрос не делает внешний запрос ошибочным - PullRequest
3 голосов
/ 09 июля 2019

Помогите понять, почему ошибочный внутренний запрос не делает внешний запрос ошибочным

Следующий запрос возвращает 19

proc sql;
select count(distinct name)
    from sashelp.class
        where name in (select name from sashelp.iris
                        where species is not missing)
;quit; *returns 19;

Однако я ожидаю, что он вернет error , потому что внутренний запрос действительно возвращает ошибку (потому что столбец 'name' не найден в sashelp.iris):

proc sql;    
select name from sashelp.iris
                            where species is not missing
;quit; *returns an error (column not found);

Кто-нибудь может объяснить логику, почему я не получаю сообщение об ошибке в первом случае?

1 Ответ

6 голосов
/ 09 июля 2019

Вы не указали ссылку на name, поэтому она использовала единственную найденную переменную с именем name. Итак, вы запустили этот запрос:

proc sql;
select count(distinct A.name)
  from sashelp.class A
  where A.name in
(select A.name
  from sashelp.iris B
  where B.species is not missing
)
;
quit;

Если вы на самом деле обратитесь к ИМЯ из IRIS, вы получите сообщение об ошибке.

220   proc sql;
221   select count(distinct A.name)
222     from sashelp.class A
223     where A.name in
224   (select B.name
225     from sashelp.iris B
226     where B.species is not missing
227   )
228   ;
ERROR: Column name could not be found in the table/view identified with the correlation name B.
ERROR: Unresolved reference to table/correlation name B.
229   quit;
...