Проблемы с подзапросом, поле не существует, но преимущество дает мне результаты - PullRequest
2 голосов
/ 27 марта 2012

У меня вопрос по подзапросам в пользу. Анализируя несколько SQL-запросов, я наткнулся на странную ситуацию.

Когда я выполнил следующий SQL, я получил эти результаты:

select *
from orderlyn
where OLWArtnr in (select OlwArtnr from prijs)

Но OlwArtNr не существует в таблице Prijs.

CREATE TABLE Prijs (
      Nummer Char( 20 ),
      Lijst Char( 15 ),
      Verkprijs Double( 0 ),
      Aankprijs Double( 0 ),
      BTW Char( 2 ),
      Naam1 Char( 30 ),
      Naam2 Char( 30 ),
      Naam3 Char( 30 ),
      Naam4 Char( 30 ),
      Vervangnr Char( 20 ),
      Kortcode Char( 10 ),
      Datum Date,
      Vpeuro Double( 0 ),
      A1 Char( 20 )) IN DATABASE;

Больше всего меня беспокоит тот факт, что он дает разные результаты, когда я использовал select nummer from prijs в качестве подзапроса.

Почему преимущество дает мне результаты, когда столбец даже не существует внутри другой таблицы? Я думаю, что это должно дать ошибку.

Если преимущество состоит в том, чтобы делать интерпретации, по каким параметрам он это делает?

1 Ответ

5 голосов
/ 28 марта 2012

Это не ошибка.Он работает правильно.

OlwArtnr в подзапросе, если он не полностью определен, преобразуется в столбец OlwArtnr в родительском запросе.Неквалифицированный столбец в подзапросе разрешается сначала с помощью таблицы в подзапросе.Если это не один из столбцов таблиц в подзапросе, он перейдет к родительскому запросу, используя таблицы в родительском запросе.Этот процесс продолжается по цепочке, пока столбец не преобразуется в таблицу или не будет сгенерирована ошибка.

То же самое вы получите с SQLServer или другой базой данных.

...