【问题标题】:Creating a subquery in Access在 Access 中创建子查询
【发布时间】:2015-02-09 20:24:53
【问题描述】:

我正在尝试在 Access 中创建子查询,但我收到一条错误消息,指出此子查询可以返回一条记录。我想找到拥有最多宠物的前 10 家公司,然后我想知道这些宠物的名字。我以前从未创建过子查询,所以我不确定我哪里出错了。这是我所拥有的:

SELECT TOP 10 dbo_tGovenrnmentRegulatoryAgency.GovernmentRegulatoryAgency
(SELECT dbo_tPet.Pet
FROM dbo_tPet)

FROM dbo_tPet INNER JOIN dbo_tGovenrnmentRegulatoryAgency ON
dbo_tPet.GovernmentRegulatoryAgencyID =
dbo_tGovenrnmentRegulatoryAgency.GovernmentRegulatoryAgencyID
GROUP BY dbo_tGovenrnmentRegulatoryAgency.GovernmentRegulatoryAgency
ORDER BY Count(dbo_tPet.PetID) DESC;

【问题讨论】:

    标签: ms-access subquery


    【解决方案1】:

    考虑这个解决方案,在WHERE IN () 子句中需要一个子查询:

    SELECT t1.GovernmentRegulatoryAgency, dbo_tPet.Pet,
    FROM dbo_tPet 
    INNER JOIN dbo_tGovenrnmentRegulatoryAgency t1 ON
    dbo_tPet.GovernmentRegulatoryAgencyID = t1.GovernmentRegulatoryAgencyID    
    WHERE t1.GovernmentRegulatoryAgency IN   
        (SELECT TOP 10 t2.GovernmentRegulatoryAgency
        FROM dbo_tPet 
        INNER JOIN dbo_tGovenrnmentRegulatoryAgency t2 ON
        dbo_tPet.GovernmentRegulatoryAgencyID = t2.GovernmentRegulatoryAgencyID
        GROUP BY t2.GovernmentRegulatoryAgency
        ORDER BY Count(dbo_tPet.Pet) DESC);
    

    不需要表别名,但我将它们包括在内以进行演示。

    【讨论】:

      【解决方案2】:

      希望这样做:

      SELECT a.GovernmentRegulatoryAgency, t.NumOfPets
      FROM dbo_tGovenrnmentRegulatoryAgency a
      INNER JOIN (
          SELECT TOP 10 p.GovernmentRegulatoryAgencyID, COUNT(p.PetID) AS NumOfPets
          FROM dbo_tPet p
          GROUP BY p.GovernmentRegulatoryAgencyID
          ORDER BY COUNT(p.PetID) DESC
      ) t
      ON a.GovernmentRegulatoryAgencyID = t.GovernmentRegulatoryAgencyID
      

      简而言之,首先对嵌套查询进行排序,确定相关机构是什么,然后内部连接回机构表以获取所选择的机构的详细信息。

      【讨论】:

      • 不反对这个答案,但值得一提的是,Access 中的嵌套查询通常非常慢(可惜,因为在几乎所有基于服务器的系统中,绝对不是这种情况,嵌套查询被视为最佳实践,因为它们清晰)。您可以将其重写为单个聚合查询。
      • @BenMcIntyre - 继续,然后测试结果。
      猜你喜欢
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多