sql - 子查询出现问题,字段不存在,但优点是给我结果

标签 sql advantage-database-server

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

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

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

但 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;

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

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

如果优势在于进行解释,那么它会根据哪些参数进行解释?

最佳答案

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

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

使用 SQLServer 或其他数据库您将得到相同的结果。

关于sql - 子查询出现问题,字段不存在,但优点是给我结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887251/

相关文章:

mysql - 为什么 MySQL 数据库中的更改没有在 WebMatrix 数据库查看器中更新?

sql - 如何在不打开Excel工作表的情况下刷新Excel中的SQL连接

sql - 关于微服务架构中容器的可扩展性

sql - 如何识别与 sybase 数据库中的表关联的触发器?

sql - 访问Advantage Management Utility值以获取反馈

sql - 如何从 COUNT() 获取前 10 名和 ORDER BY()

java - 正则表达式替换 <

sql - Advantage 数据库中的分页

delphi - Delphi 项目中 Advantage 无法识别错误 5018 句柄

delphi - 在ADS中找不到与dbase III通信的正确代码页