子查询的问题,字段不存在,但优点是给我结果

Han*_*nne 2 sql advantage-database-server

我有一个关于子查询的问题.当我分析几个SQL查询时,我偶然发现了一个奇怪的情况.

当我执行以下SQL时,我得到了以下结果:

select *
from orderlyn
where OLWArtnr in (select OlwArtnr from prijs)
Run Code Online (Sandbox Code Playgroud)

但是表格Prijs中不存在OlwArtNr.

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;
Run Code Online (Sandbox Code Playgroud)

最让我担心的是,当我用作select nummer from prijs子查询时,它会给出不同的结果.

当列在另一个表中不存在时,为什么优势会给我结果?我认为应该给出错误.

如果有利于解释,它在哪些参数上做这个?

Ale*_*x W 5

这不是一个错误.它工作正常.

子查询中的OlwArtnr在未完全限定时解析为父查询中的OlwArtnr列.子查询中的非限定列首先使用子查询中的表进行解析.如果它不是子查询中表的列之一,则它将使用父查询中的表转到父查询.此过程继续向上链接,直到列解析为表或生成错误.

您将获得与SQLServer或其他数据库相同的内容.