首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么(以及如何)对FROM表的“隐式”引用会在此查询中导致返回假结果?

为什么(以及如何)对FROM表的“隐式”引用会在此查询中导致返回假结果?
EN

Stack Overflow用户
提问于 2019-05-22 22:46:23
回答 1查看 24关注 0票数 0

我的查询的目的是通过RegistrationNumber在两个表之间链接DateTimeIn和DateTimeOut条目。(数据来自一项停车位利用率调查...)

我先尝试了连接,但它不能处理复杂性。例如,一辆车可能有一个DateTimeOut (它离开了停车区),但没有DateTimeIn (它从来没有停车,可能是因为所有的停车位都被占用了)。此外,我还必须确保第一个DateTimeIn链接到最早的DateTimeOut,并且每个DateTime只链接一次。

下面的“嵌套查询”似乎完成了工作,但它返回了假阳性结果。我不知道这些是怎么产生的。即使没有RegistrationNumber的DateTimeOut,也会返回一个。奇怪的是,在显式地引用了这些表之后,这些误报就被消除了。

代码语言:javascript
复制
-- Implicit reference to the second table (causes false positives):

SELECT
    RegistrationNumber,
    DateTimeIn,
    (SELECT MIN(O.DateTimeOut) FROM HobieBeachVehiclesOut O WHERE O.RegistrationNumber = RegistrationNumber AND O.DateTimeOut > DateTimeIn) AS DateTimeOut
FROM HobieBeachVehiclesIn
ORDER BY DateTimeIn, RegistrationNumber

-- Explicit references all round (no glaring errors):

SELECT
    RegistrationNumber,
    DateTimeIn,
    (SELECT MIN(O.DateTimeOut) FROM HobieBeachVehiclesOut O WHERE O.RegistrationNumber = A.RegistrationNumber AND O.DateTimeOut > A.DateTimeIn) AS DateTimeOut
FROM HobieBeachVehiclesIn A
ORDER BY DateTimeIn, RegistrationNumber

结果:

代码语言:javascript
复制
-- Implicit reference to the second table (causes false positives):

JHB 036 03/05/2019 00:09:00 03/05/2019 06:08:00
FNB 559 03/05/2019 06:00:00 03/05/2019 06:08:00
HGB 115 03/05/2019 06:05:00 03/05/2019 06:08:00

-- Explicit references all round (no glaring errors):

JHB 036 03/05/2019 00:09:00 NULL
FNB 559 03/05/2019 06:00:00 03/05/2019 06:48:00
HGB 115 03/05/2019 06:05:00 03/05/2019 07:53:00

错误是显而易见的,现在,再看一眼,就更奇怪了。这个DateTimeOut从何而来?为什么查询不能处理对dbo.HobieBeachVehiclesIn的“隐式引用”?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56259481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档