繁体   English   中英

使用自连接时,MS Access 2010中没有当前记录错误

[英]No Current Record Error in MS Access 2010 while using a self join

我用自联接替换子查询以提高查询性能。

旧的子查询是这样的:

(SELECT fage2.agecat 
 FROM   people AS fage2 
 WHERE  fage2.aacode = people.aacode 
       AND fage2.persno = 2) AS RAge2,

新的自我联接是这样的:

(SELECT [People].[AgeCat] 
FROM   [People] 
       INNER JOIN [People] AS p2 
         ON [People].[aacode] = [P2].[aacode] 
WHERE  [P2].[PERSNO] = 2 ) AS RAge2,

但返回“无当前记录”错误消息。

目的是找到具有相同aacode但PERSNO编号为2的记录,并在名为RAge2的列中返回该记录的AgeCat,

这只是较大查询的一部分,将在下面进行完整说明, 将更多SQL子查询转换为联接,同时查看同一表中的另一条记录Access 2010

请用:

(SELECT [People].[AgeCat] FROM [People] INNER JOIN [People] AS P2 ON ([People].[aacode] = [P2].[aacode] AND [P2].[PERSNO] = 2)) AS RAge2

Huum,看来您要优化的查询是较大查询的一部分,对于发布整个查询的问题非常重要,这样有助于理解您的问题...

同样,从我所看到的,您将显示具有相同AACode的两行的RAge2,不仅是您在目标上说的具有Persno = 2的行。 粘贴整个查询也将有助于理解这一点。

我试图理解您的查询,因此为您的原始查询创建了一个查询:

SELECT
(SELECT FAge2.AgeCat
 FROM People AS FAge2
 WHERE FAge2.aacode = People.aacode 
   AND FAge2.PERSNO = 2) AS RAge2,
People.PersonId
FROM People

为了获得相同的结果,您将需要左联接而不是内部联接,因为带有子查询的查询不会从外部表中排除结果,因此,作为结果的联接查询,您将需要进行以下操作:

SELECT 
 FAge2.AgeCat as RAge2,
 People.PersonID,
FROM People
Left JOIN People AS FAge2 ON (FAge2.aacode = People.aacode AND FAge2.PERSNO = 2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM