Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL MAX函数异常行为_Sql_Oracle - Fatal编程技术网

SQL MAX函数异常行为

SQL MAX函数异常行为,sql,oracle,Sql,Oracle,你好。 有以下问题。 假设有一个返回以下内容的查询: 当我尝试在其上选择maxcol1、maxcol2时,它返回我: 当我尝试选择maxcol2时,maxcol1会返回我: 你知道这里发生了什么事吗 给出问题的查询是 select max(col2),max(col1) from ( SELECT NVL(IS_IN_OPEN_BR, 0) AS col1, NVL(IS_IN_OPEN_ISR, 0)

你好。 有以下问题。 假设有一个返回以下内容的查询:

当我尝试在其上选择maxcol1、maxcol2时,它返回我:

当我尝试选择maxcol2时,maxcol1会返回我:

你知道这里发生了什么事吗

给出问题的查询是

select max(col2),max(col1)
from (

SELECT 
        NVL(IS_IN_OPEN_BR, 0)                             AS col1,
        NVL(IS_IN_OPEN_ISR, 0)                            AS col2
      FROM
        (
        SELECT DISTINCT PRD_DEV_CODE AS DEV_CODE_ISR,
          PRD_GRP_CODE               AS GRP_CODE_ISR,
          1                          AS IS_IN_OPEN_ISR
        FROM ATL_ADM.PRODUCT PRD
        INNER JOIN ATL_ADM.SB_REQ SR
        ON PRD.PRD_ID = SR.SBR_PRD_ID
        INNER JOIN ATL_ADM.LIB_REPLENISH_REQ LSR
        ON LSR.LSR_ID         = SR.SBR_LSR_ID
        WHERE LSR.LSR_STATUS <> 'CLOSED'
        GROUP BY PRD_DEV_CODE,
          PRD_GRP_CODE
        ) ISR
      FULL OUTER JOIN
        (
        SELECT DISTINCT PRD.PRD_DEV_CODE DEV_CODE_SHIP,
          PRD.PRD_GRP_CODE AS GRP_CODE_SHIP,
          NVL( MAX (SHP.SHIP_SHIPDATE), MAX (SHP.SHIP_UPDDATET)) LAST_SHIP_DATE
        FROM ATL_ADM.SB_REQ SR
        JOIN ATL_ADM.SHIPMENT SHP
        ON SR.SBR_ID = SHP.SHIP_SBR_ID
        JOIN ATL_ADM.PRODUCT PRD
        ON PRD.PRD_ID        = SR.SBR_PRD_ID
        WHERE SR.SBR_TYPE    = 'FLA'
        AND SHP.SHIP_STATUS IN ('SHIPPE', 'MANDEV')
        GROUP BY PRD.PRD_DEV_CODE ,
          PRD.PRD_GRP_CODE
        ) SHIPS ON DEV_CODE_ISR = DEV_CODE_SHIP
      FULL OUTER JOIN
        (
            SELECT DISTINCT 
                PRODUCT.PRD_DEV_CODE  DEV_CODE_BR,
                PRODUCT.PRD_GRP_CODE GRP_CODE_BR,
                1 IS_IN_OPEN_BR
            FROM ATL_ADM.PRODUCT
            JOIN ATL_ADM.SB_REQ
            ON PRODUCT.PRD_ID = SB_REQ.SBR_PRD_ID
            JOIN ATL_ADM.REQT_SET
            ON REQT_SET.REQTS_ID = SB_REQ.SBR_RS_ID
            JOIN ATL_ADM.BRIEF
            ON BRIEF.BR_ID = REQT_SET.REQTS_BR_ID
            WHERE BRIEF.BR_STATUS_CODE NOT IN ('CLOSED', 'CANCEL')
            GROUP BY PRODUCT.PRD_GRP_CODE,
            PRODUCT.PRD_DEV_CODE,
            BRIEF.BR_STATUS_CODE
        ) BRS ON DEV_CODE_BR = DEV_CODE_SHIP)
使用以下提示:

select /*+ no_query_transformation */
          max(col1), max(col2)
from  ( ....
如果没有它,Oracle优化器将尝试猜测您的意图,并重新使用sql以获得更好的性能


对于使用像这样的内联性能视图的复杂查询,常常会出现错误的猜测。

向我们展示SQL查询,我使用的SQL查询比SQL查询更多,您能否提供一个完整的环境来演示这种行为,包括表DDL、insert语句和SQL查询。在没有人能够复制的情况下,可能有人需要查看某些数据库参数results@Ben,我无法提供更多数据:您的数据库版本是什么?我看到优化器在使用完全外部联接的查询上重写查询时出现问题。当我们升级到11.2时,这些问题中的大多数都得到了修复。有时,您可以通过执行类似于SELECT*中的SELECT MAXcol2、MAXcol1(其中ROWNUM>=1)的操作来避免优化器查询重写