【问题标题】:Subquery question in MS AccessMS 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

【问题讨论】:

    标签: sql ms-access subquery


    【解决方案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 别名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多