2012-04-05 48 views
0

查詢是如..不是在同一個表中的條款需要時間在oracle中

select deviceid,devicename,totalbytes,'Others' as protocolgroup from (
    select d.deviceid,d.name as devicename,sum(bytes) as totalbytes from tblmainallowedtraffic_5min b,tbldevice d 
    WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A','C026100710-36NPQE','C016801597-V1Z8IM')) 
    and proto_group not in (select proto_group from (select proto_group,sum(bytes) from 
    TBLMAINALLOWEDTRAFFIC_5MIN B WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A', 
    'C026100710-36NPQE','C016801597-V1Z8IM')) AND "5mintime" >='04-APR-12 12.00.00.000000 AM' AND 
    "5mintime" <='04-APR-12 11.59.59.000000 PM' group by proto_group order by sum(bytes) desc) WHERE ROWNUM <=5) 
    AND B.APPID=D.APPID AND "5mintime" >='04-APR-12 12.00.00.000000 AM' AND "5mintime" <='04-APR-12 11.59.59.000000 PM' 
    GROUP BY D.APPID,D.DEVICEID,D.NAME) 
    order by protocolgroup desc, totalbytes desc 

在解釋計劃它說..

3 - 過濾器(NOT EXISTS(不可行))

如果更改與靜態內部查詢結果中的上述查詢,輸出來更快:

select deviceid,devicename,totalbytes,'Others' as protocolgroup from (
    select d.deviceid,d.name as devicename,sum(bytes) as totalbytes from tblmainallowedtraffic_5min b,tbldevice d 
    WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A','C026100710-36NPQE','C016801597-V1Z8IM')) 
    and proto_group not in ('POP3','HTTP Request Response','Web','GET HTTP DATA MORE THAN 976 KB','SMTP') 
    AND B.APPID=D.APPID AND "5mintime" >='04-APR-12 12.00.00.000000 AM' AND "5mintime" <='04-APR-12 11.59.59.000000 PM' 
    GROUP BY D.APPID,D.DEVICEID,D.NAME) 
    order by protocolgroup desc, totalbytes desc 

所以不存在子句是在同一個表上創建的問題..
你可以給這個想法嗎?

+0

您可以使用[即時SQL格式化程序(http://www.dpriver.com/pp/sqlformat .htm)在線工具來格式化sql。 – 2012-04-05 11:16:42

回答

0

編輯:新的答案:

嘗試做一個反連接:

SELECT deviceid, 
    devicename, 
    totalbytes, 
    'Others' AS protocolgroup 
FROM 
    (SELECT d.deviceid, 
    d.name  AS devicename, 
    SUM(bytes) AS totalbytes 
    FROM tblmainallowedtraffic_5min b, 
    tbldevice d 
    LEFT OUTER JOIN 
    (SELECT proto_group 
    FROM 
     (SELECT proto_group, 
     SUM(bytes) 
     FROM TBLMAINALLOWEDTRAFFIC_5MIN B 
     WHERE (B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A', 'C026100710-36NPQE','C016801597-V1Z8IM')) 
     AND "5mintime" >='04-APR-12 12.00.00.000000 AM' 
     AND "5mintime" <='04-APR-12 11.59.59.000000 PM' 
     GROUP BY proto_group 
     ORDER BY SUM(bytes) DESC 
    ) 
    WHERE ROWNUM <=5 
    ) e ON b.proto_group = e.proto_group 
    WHERE (B.APPID  IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A','C026100710-36NPQE','C016801597-V1Z8IM')) 
    AND e.proto_group is null 
    AND B.APPID  =D.APPID 
    AND "5mintime" >='04-APR-12 12.00.00.000000 AM' 
    AND "5mintime" <='04-APR-12 11.59.59.000000 PM' 
    GROUP BY D.APPID, 
    D.DEVICEID, 
    D.NAME 
) 
ORDER BY protocolgroup DESC, 
    totalbytes DESC 
+0

正如你所說的「你試圖訪問一個嵌套的SQL是2級下來的列」..但是當我用'在'條款替換'不在''條款..它工作正常..所以我不認爲這個問題是2級下來查詢.. – 2012-04-05 10:57:22

+0

對不起,我沒有看到B被重新定義在內部的SQL。 – 2012-04-05 11:03:20

相關問題