【问题标题】:No Current Record Error in MS Access 2010 while using a self join使用自加入时,MS Access 2010 中没有当前记录错误
【发布时间】:2016-01-06 06:22:54
【问题描述】:

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

旧的子查询是这样的:

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

新的self join是这样的:

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

但返回 No Current Record 错误消息。

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

这只是一个更大的查询的一部分,完整的解释Convert a SQL subquery into a join when looking at another record in the same table Access 2010

【问题讨论】:

标签: sql ms-access-2010 self-join


【解决方案1】:

嗯,看起来您要优化的这个查询是更大查询的一部分,并且对于您发布整个查询的问题很重要,因此有助于理解您的问题...

此外,据我所知,您将显示具有相同 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)

【讨论】:

    【解决方案2】:

    请使用:

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

    【讨论】:

    • 你确定存在 persno=2 的人吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多