MS Access 中的子查询问题

Posted

技术标签:

【中文标题】MS Access 中的子查询问题【英文标题】:Subquery question in MS Access 【发布时间】:2010-01-13 14:00:49 【问题描述】:

我不太确定为什么以下查询不会在 Access 中运行。 它要求我给出 s1.sku 的值


SELECT s1.SkuApexId, s1.sku, s1.apex, s1.btw, s1.gebruikernr, q2.*
FROM tblSkuApex AS s1,
              (SELECT MAX(s2.begindatum)
              FROM tblskuapex  s2
              WHERE s1.sku = s2.sku) q2

【问题讨论】:

【参考方案1】:

按照您的说法,您需要对 q2 表进行交叉连接,这将根据 s1 表的每条记录的 s1.sku 值进行更改,这是不可接受的。

我认为您应该将 q2 子查询作为列而不是表。由于您检索的是单个值,因此可以很容易地这样放置:

SELECT s1.SkuApexId, s1.sku, s1.apex, s1.btw, s1.gebruikernr, 
         (SELECT MAX(s2.begindatum)
              FROM tblskuapex  s2
              WHERE s1.sku = s2.sku) as maxbegindatum
FROM tblSkuApex AS s1

甚至更好,为什么不将其作为普通聚合来获取,因为您从同一个表中请求最大值:

SELECT 
    s1.SkuApexId, s1.sku, s1.apex, 
    s1.btw, s1.gebruikernr, MAX(begindatum)
FROM tblSkuApex AS s1
group by 
    s1.SkuApexId, s1.sku, s1.apex, 
    s1.btw, s1.gebruikernr

注意:您可以在任何地方省略 s1 别名

【讨论】:

以上是关于MS Access 中的子查询问题的主要内容,如果未能解决你的问题,请参考以下文章

Ms Access:来自另一个子表单的子表单重新查询未更新

在 MS Access 中以分号分隔的列表检索电子邮件地址的子查询

Select查询Ms访问中的子查询

查询不会更新子窗体 MS-Access 中的表

MS Access 中的加入或子查询

MS Access:将参数传递给不带 SQL 的子报表