MS Access中的子查询问题

时间:2010-01-13 14:00:50

标签: sql ms-access subquery

我不太确定为什么以下查询不会在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 个答案:

答案 0 :(得分:4)

你提出它的方式,你需要交叉连接到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

甚至更好,为什么不把它作为普通的聚合,因为你从同一个表中请求max:

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别名