我有一个关于优势子查询的问题。当我分析几个 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/