首页 > 解决方案 > 如何将 SUBSELECT 与 JOIN 一起使用?

问题描述

我想构建一个 OpenSQL 查询以仅返回statall的最大值objnr
这有效:

    SELECT O~OBJNR
      FROM JCDS AS O
      WHERE O~OBJNR = 'Obj12345'
      AND STAT = ( SELECT MAX(STAT) 
                     FROM JCDS AS I 
                     WHERE I~OBJNR = O~OBJNR ).

但是,如果我尝试使用连接,而不是objnr直接提供,我会收到一条错误消息:

    SELECT O~OBJNR, O~STAT
      FROM JCDS AS O
      INNER JOIN AFVC 
          ON AFVB~OBJNR = O~OBJNR
      WHERE "AUFPL" = 'Aufpl12345' 
      AND O~STAT = ( SELECT MAX(STAT) 
                       FROM JCDS AS I 
                       WHERE I~OBJNR = O~OBJNR ).

错误信息没有意义;“SQL 错误”

标签: saphanaopensql

解决方案


您可以通过按对象编号分组来简化查询:

SELECT O.OBJNR, MAX(O.STAT)
FROM JCDS AS O
GROUP BY O.OBJNR

根据您需要从连接表中显示的列,您可以通过以下方式扩展组:

SELECT O.OBJNR, A.SOMECOL, MAX(O.STAT)
FROM JCDS AS O
INNER JOIN AFVC AS A
ON AFVB.OBJNR = O.OBJNR
GROUP BY O.OBJNR, A.SOMECOL

或使用子查询:

SELECT MAXSTAT.OBJNR, MAXSTAT.STAT, A.SOMECOL
FROM (
SELECT O.OBJNR, MAX(O.STAT) STAT
FROM JCDS AS O
GROUP BY O.OBJNR ) MAXSTAT
INNER JOIN AFVC AS A
ON AFVB.OBJNR = MAXSTAT.OBJNR

推荐阅读