Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 尽管建议使用ANSI样式的联接,但在WHERE子句中指定联接条件仍然是完全有效的,并且优化器完全能够弄清楚发生了什么。我同意你的建议,即OP确保存在适当的索引。我有另一个与下面相同的查询,它比上面的查询稍微复杂一些,因为这需要查找大量表格并检查总价格和付款_Sql_Oracle - Fatal编程技术网

Sql 尽管建议使用ANSI样式的联接,但在WHERE子句中指定联接条件仍然是完全有效的,并且优化器完全能够弄清楚发生了什么。我同意你的建议,即OP确保存在适当的索引。我有另一个与下面相同的查询,它比上面的查询稍微复杂一些,因为这需要查找大量表格并检查总价格和付款

Sql 尽管建议使用ANSI样式的联接,但在WHERE子句中指定联接条件仍然是完全有效的,并且优化器完全能够弄清楚发生了什么。我同意你的建议,即OP确保存在适当的索引。我有另一个与下面相同的查询,它比上面的查询稍微复杂一些,因为这需要查找大量表格并检查总价格和付款,sql,oracle,Sql,Oracle,尽管建议使用ANSI样式的联接,但在WHERE子句中指定联接条件仍然是完全有效的,并且优化器完全能够弄清楚发生了什么。我同意你的建议,即OP确保存在适当的索引。我有另一个与下面相同的查询,它比上面的查询稍微复杂一些,因为这需要查找大量表格并检查总价格和付款。没有“V”状态。它包括5个不同的表:Bob Jarvs:这样做相关子查询需要SQL返回每个子查询的整个结果集,进行笛卡尔连接,然后对其进行筛选。优化器无法提供帮助。@qwerty13579 Oracle不需要仅仅因为查询使用老式语法就进行笛卡


尽管建议使用ANSI样式的联接,但在WHERE子句中指定联接条件仍然是完全有效的,并且优化器完全能够弄清楚发生了什么。我同意你的建议,即OP确保存在适当的索引。我有另一个与下面相同的查询,它比上面的查询稍微复杂一些,因为这需要查找大量表格并检查总价格和付款。没有“V”状态。它包括5个不同的表:Bob Jarvs:这样做相关子查询需要SQL返回每个子查询的整个结果集,进行笛卡尔连接,然后对其进行筛选。优化器无法提供帮助。@qwerty13579 Oracle不需要仅仅因为查询使用老式语法就进行笛卡尔连接。如果您查看跟踪,您会发现Oracle会自动将大多数ANSI连接重新写入老式连接。鲍勃说得对。99.9%的情况下,这不会有什么不同。总有一些奇怪的情况下,重新编写语法样式似乎有帮助,但这是例外,而不是规则。尽管我同意,出于其他原因,使用较新的语法很重要。
{SELECT /*+ PARALLEL(5) */
    EXTER.ACE_IT_REGION_ID ,
    EXTER.ACE_IT_LOCATION_CODE,
    EXTER.ACE_IT_ORD_NUM,
    EXTER.TOTAL_ITEM_PRICE_PER_ORDER,
    EXTER.TOTAL_ACE_PAYD_AMOUNT,
    EXTER.ACE_ORD_COMPLETION_TIME AS DATEOFDATA
FROM
(SELECT /*+ use_hash(TAB1,TAB2)  +*/
        DISTINCT
        TAB1.ACE_IT_REGION_ID ,
        TAB1.ACE_IT_LOCATION_CODE,
        TAB1.ACE_IT_ORD_NUM,
        TAB1.TOTAL_ITEM_PRICE_PER_ORDER,
        TAB2.TOTAL_ACE_PAYD_AMOUNT,
        TAB1.ACE_ORD_COMPLETION_TIME 
FROM
(SELECT     AAA.ACE_IT_REGION_ID,
            AAA.ACE_IT_LOCATION_CODE,
            AAA.ACE_IT_ORD_NUM,
            AAA.SUM_PRICE_PLUS_TAX,
            AAA.TOTAL_DISCOUNT,
            (AAA.SUM_PRICE_PLUS_TAX-AAA.TOTAL_DISCOUNT) AS TOTAL_ITEM_PRICE_PER_ORDER,
            TRUNC(AAA.ACE_ORD_COMPLETION_TIME)                
    FROM    (SELECT  B.ACE_IT_REGION_ID AS ACE_IT_REGION_ID,
                     B.ACE_IT_LOCATION_CODE AS ACE_IT_LOCATION_CODE,
                     B.ACE_IT_ORD_NUM AS ACE_IT_ORD_NUM, 
                     (SUM(B.ACE_IT_ITEM_PRICE + B.ACE_IT_TAX_AMT)*B.ACE_IT_QTY) AS     SUM_PRICE_PLUS_TAX,    
                     SUM(B.ACE_IT_DISC_AMT+B.ACE_IT_AUTO_DISC_AMT) AS TOTAL_DISCOUNT,
                     TRUNC(A.ACE_ORD_COMPLETION_TIME ) AS ACE_ORD_COMPLETION_TIME
            FROM    POSDB.ACE_ORDERS A, POSDB.ACE_ITEM_TRAN B
            WHERE   A.ACE_ORD_COMPLETION_TIME >= TRUNC(SYSDATE -1) 
            AND     A.ACE_ORD_COMPLETION_TIME < TRUNC(SYSDATE)
            AND     A.ACE_ORD_REGION_ID = B.ACE_IT_REGION_ID
            AND     A.ACE_ORD_LOCATION_CODE = B.ACE_IT_LOCATION_CODE
            AND     A.ACE_ORD_NUM = B.ACE_IT_ORD_NUM
            AND     A.ACE_ORD_TYPE = 'IS'
            AND     (A.ACE_ORD_STATUS = 'CR'
                    OR A.ACE_ORD_STATUS IS NULL
                    OR A.ACE_ORD_STATUS LIKE ' %' 
                    OR  A.ACE_ORD_STATUS LIKE '% ')
            AND     (B.ACE_IT_VOID_IND <> 'V' OR  B.ACE_IT_VOID_IND IS NULL )
            GROUP BY B.ACE_IT_REGION_ID,
                     B.ACE_IT_LOCATION_CODE,
                     B.ACE_IT_ORD_NUM,
                     A.ACE_ORD_COMPLETION_TIME) AAA
    ORDER BY AAA.ACE_IT_REGION_ID,
            AAA.ACE_IT_LOCATION_CODE,
            AAA.ACE_IT_ORD_NUM,   
            AAA.ACE_ORD_COMPLETION_TIME) TAB1,
    (SELECT ACE_PAYD_REGION_ID,
            ACE_PAYD_LOCATION_CODE,
            ACE_PAYD_ORD_NUM,
            SUM(ACE_PAYD_AMOUNT) TOTAL_ACE_PAYD_AMOUNT
     FROM   POSDB.ACE_PAYMENT_DTL
     WHERE  ACE_PAYD_POSTING_TIMESTAMP BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE) 
     AND    (ACE_PAYD_STATUS <> 'V' OR   ACE_PAYD_STATUS IS NULL )
     GROUP BY 
            ACE_PAYD_REGION_ID,
            ACE_PAYD_LOCATION_CODE,
            ACE_PAYD_ORD_NUM) TAB2              
WHERE   TAB1.ACE_IT_REGION_ID = TAB2.ACE_PAYD_REGION_ID
AND     TAB1.ACE_IT_LOCATION_CODE = TAB2.ACE_PAYD_LOCATION_CODE
AND     TAB1.ACE_IT_ORD_NUM = TAB2.ACE_PAYD_ORD_NUM
ORDER BY
    TAB1.ACE_IT_REGION_ID ,
    TAB1.ACE_IT_LOCATION_CODE,
    TAB1.ACE_IT_ORD_NUM       ) EXTER        
WHERE   (EXTER.TOTAL_ITEM_PRICE_PER_ORDER = EXTER.TOTAL_ACE_PAYD_AMOUNT)
AND     EXTER.ACE_ORD_COMPLETION_TIME IS NOT NULL;}
SELECT tab1.fld1, tab.fld2
FROM tab1
JOIN tab2 ON (tab2.ID = tab1.ID AND tab2.fld3 = 'xxx')
JOIN tab3 ON (tab3.ID2 = tab2.ID2)
WHERE tab1.fld4 = 'aaa'
and tab3.fld5 > 100
        SELECT DISTINCT *
           FROM
              ( SELECT
                      AAA.ACE_IT_REGION_ID,
                      AAA.ACE_IT_LOCATION_CODE,
                      AAA.ACE_IT_ORD_NUM,
                      AAA.SUM_PRICE_PLUS_TAX,
                      AAA.TOTAL_DISCOUNT,
                      AAA.SUM_PRICE_PLUS_TAX - AAA.TOTAL_DISCOUNT AS TOTAL_ITEM_PRICE_PER_ORDER,
                      TRUNC(AAA.ACE_ORD_COMPLETION_TIME)  AS DATEOFDATA
                   FROM
                      ( SELECT  
                              B.ACE_IT_REGION_ID,
                              B.ACE_IT_LOCATION_CODE,
                              B.ACE_IT_ORD_NUM,
                              ( SUM( B.ACE_IT_ITEM_PRICE + B.ACE_IT_TAX_AMT)
                                * B.ACE_IT_QTY ) AS  SUM_PRICE_PLUS_TAX,
                              SUM( B.ACE_IT_DISC_AMT + B.ACE_IT_AUTO_DISC_AMT) AS TOTAL_DISCOUNT,
                              TRUNC( A.ACE_ORD_COMPLETION_TIME ) AS ACE_ORD_COMPLETION_TIME
                           FROM
                              POSDB.ACE_ORDERS A, 
                              POSDB.ACE_ITEM_TRAN B
                           WHERE
                                  A.ACE_ORD_TYPE = 'IS'
                              AND A.ACE_ORD_REGION_ID = B.ACE_IT_REGION_ID
                              AND A.ACE_ORD_LOCATION_CODE = B.ACE_IT_LOCATION_CODE
                              AND A.ACE_ORD_NUM = B.ACE_IT_ORD_NUM
                              AND A.ACE_ORD_COMPLETION_TIME >= TRUNC(SYSDATE -1)
                              AND A.ACE_ORD_COMPLETION_TIME < TRUNC(SYSDATE)
                              AND (   A.ACE_ORD_STATUS = 'CR'
                                   OR A.ACE_ORD_STATUS IS NULL
                                   OR A.ACE_ORD_STATUS LIKE ' %' 
                                   OR  A.ACE_ORD_STATUS LIKE '% ')
                              AND (    B.ACE_IT_VOID_IND <> 'V' 
                                   OR  B.ACE_IT_VOID_IND IS NULL )
                           GROUP BY 
                              B.ACE_IT_REGION_ID,
                              B.ACE_IT_LOCATION_CODE,
                              B.ACE_IT_ORD_NUM,
                              A.ACE_ORD_COMPLETION_TIME ) AAA
                   ORDER BY 
                      AAA.ACE_IT_REGION_ID,
                      AAA.ACE_IT_LOCATION_CODE,
                      AAA.ACE_IT_ORD_NUM,
                      AAA.ACE_ORD_COMPLETION_TIME) TAB1,
              ( SELECT
                      APD.ACE_PAYD_REGION_ID,
                      APD.ACE_PAYD_LOCATION_CODE,
                      APD.ACE_PAYD_ORD_NUM,
                      SUM(APD.ACE_PAYD_AMOUNT) TOTAL_ACE_PAYD_AMOUNT
                   FROM
                      POSDB.ACE_PAYMENT_DTL APD
                   WHERE  
                          APD.ACE_PAYD_POSTING_TIMESTAMP 
                            BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE)
                      AND (   APD.ACE_PAYD_STATUS <> 'V' 
                           OR APD.ACE_PAYD_STATUS IS NULL )
                   GROUP BY 
                      APD.ACE_PAYD_REGION_ID,
                      APD.ACE_PAYD_LOCATION_CODE,
                      APD.ACE_PAYD_ORD_NUM ) TAB2
           WHERE   
                  TAB1.ACE_IT_REGION_ID = TAB2.ACE_PAYD_REGION_ID
              AND TAB1.ACE_IT_LOCATION_CODE = TAB2.ACE_PAYD_LOCATION_CODE
              AND TAB1.ACE_IT_ORD_NUM = TAB2.ACE_PAYD_ORD_NUM
              AND TAB1.TOTAL_ITEM_PRICE_PER_ORDER = TAB2.TOTAL_ACE_PAYD_AMOUNT,
              AND TAB1.ACE_ORD_COMPLETION_TIME IS NOT NULL
           ORDER BY
              TAB1.ACE_IT_REGION_ID,
              TAB1.ACE_IT_LOCATION_CODE,
              TAB1.ACE_IT_ORD_NUM ) EX
table            index on..
ACE_ORDERS       ( ACE_ORD_TYPE, ACE_ORD_COMPLETION_TIME, ACE_ORD_REGION_ID, ACE_ORD_LOCATION_CODE, ACE_ORD_NUM, ACE_ORD_STATUS )
ACE_ITEM_TRAN    ( ACE_IT_REGION_ID, ACE_IT_LOCATION_CODE, ACE_IT_ORD_NUM, ACE_IT_VOID_IND )

ACE_PAYMENT_DTL  ( ACE_PAYD_POSTING_TIMESTAMP, ACE_PAYD_REGION_ID, ACE_PAYD_LOCATION_CODE, ACE_PAYD_ORD_NUM, ACE_PAYD_STATUS, ACE_PAYD_AMOUNT )