2016-05-26 3 views
0

Учитывая, что мое заявление остается неизменным. Учитывая, что имеется 15000 доступных строк, но я делаю ограничение строки с помощью rownum. Получу ли я один и тот же вывод каждый раз?Если я запускаю инструкцию SQL несколько раз с ограничением строки, получаю ли я каждый раз один и тот же результат?

Пример SQL Я использую:

SELECT distinct 
    TO_CHAR(S.DID), 
    TO_CHAR(S.DPERMCONTAINER), 
    S.DBARCODE, 
    S.DMEDIATYPE, 
    S.DDOCTITLE, 
    S.XCOMMENTS, 
    rm.xcategoryid, 
    s.xdivision, 
    S.XPROJECTNAME, 
    S.XLEGACYPROJECTNAME, 
    S.XLABELNOTE, 
    S.XPROJECTENDDATE, 
    S.XEVENTDATE 
FROM 
    PRD64_URMSERVER.EXTITEMS S 
    left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
WHERE 
    S.DMEDIATYPE = 'Folder' 
    AND S.DPERMCONTAINER IN 
      (SELECT distinct TO_CHAR(S.DID) 
      FROM PRD64_URMSERVER.EXTITEMS S 
      left join DIDV V on s.did = v.did 
      left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
      WHERE v.did IS NULL 
       and RM.xDerivedIsFrozen = '0' 
       AND s.dmediatype = 'Box' 
       and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
       and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
       and rownum <= 5000) 
UNION 
(SELECT distinct 
    TO_CHAR(S.DID), 
    TO_CHAR(S.DPERMCONTAINER), 
    S.DBARCODE, 
    S.DMEDIATYPE, 
    S.DDOCTITLE, 
    S.XCOMMENTS, 
    rm.xcategoryid, 
    s.xdivision, 
    S.XPROJECTNAME, 
    S.XLEGACYPROJECTNAME, 
    S.XLABELNOTE, 
    S.XPROJECTENDDATE, 
    S.XEVENTDATE 
FROM 
    PRD64_URMSERVER.EXTITEMS S 
    left join DIDV V on s.did = v.did 
    left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
WHERE 
    v.did IS NULL 
      and RM.xDerivedIsFrozen = '0' 
      AND s.dmediatype = 'Box' 
      and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
      and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
      and rownum <= 5000); 

Пожалуйста, дайте мне знать, если я могу быть более детальным.

+0

'Получу ли я тот же результат, каждый раз, когда' нет –

+2

порядка по строкам не не гарантируется, если явно не заказать их? query – techspider

+1

также порядок должен быть уникальным для каждой строки, поэтому, если вы заказываете какой-то идентификатор и имеете 2 записи с одинаковым идентификатором, эти записи могут переворачивать позиции. – Kostya

ответ

3

Только если вы добавите предложения ORDER BY, так что результаты всегда в одном порядке. В противном случае результаты возвращаются в недетерминированном порядке, часто в результате использования индекса или статистики.

+0

Спасибо за ответ. Итак, теоретически, если я 'ORDER BY S.DID ASC', тогда я должен получить тот же результат последовательно? – Charles

+1

В общем, да, если новые записи не будут добавлены или удалены – scsimon

+1

.. и предполагается, что 'S.DID' уникален –

2

Вы не будете получать одинаковые строки каждый раз в соответствии с Ask Tom. Даже с заказом вы не будете. rownum оценивается до того, как строки упорядочены. Если вы хотите, те же строки каждый раз, когда он должен быть заказан в подзапрос:

select * from 
(
SELECT distinct 
    TO_CHAR(S.DID), 
    TO_CHAR(S.DPERMCONTAINER), 
    S.DBARCODE, 
    S.DMEDIATYPE, 
    S.DDOCTITLE, 
    S.XCOMMENTS, 
    rm.xcategoryid, 
    s.xdivision, 
    S.XPROJECTNAME, 
    S.XLEGACYPROJECTNAME, 
    S.XLABELNOTE, 
    S.XPROJECTENDDATE, 
    S.XEVENTDATE 
FROM 
    PRD64_URMSERVER.EXTITEMS S 
    left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
WHERE 
    S.DMEDIATYPE = 'Folder' 
    AND S.DPERMCONTAINER IN 
      (SELECT distinct TO_CHAR(S.DID) 
      FROM PRD64_URMSERVER.EXTITEMS S 
      left join DIDV V on s.did = v.did 
      left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
      WHERE v.did IS NULL 
       and RM.xDerivedIsFrozen = '0' 
       AND s.dmediatype = 'Box' 
       and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
       and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
order by ...) 
where rownum <= 5000 
UNION 
select * from 
(SELECT distinct 
    TO_CHAR(S.DID), 
    TO_CHAR(S.DPERMCONTAINER), 
    S.DBARCODE, 
    S.DMEDIATYPE, 
    S.DDOCTITLE, 
    S.XCOMMENTS, 
    rm.xcategoryid, 
    s.xdivision, 
    S.XPROJECTNAME, 
    S.XLEGACYPROJECTNAME, 
    S.XLABELNOTE, 
    S.XPROJECTENDDATE, 
    S.XEVENTDATE 
FROM 
    PRD64_URMSERVER.EXTITEMS S 
    left join DIDV V on s.did = v.did 
    left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
WHERE 
    v.did IS NULL 
      and RM.xDerivedIsFrozen = '0' 
      AND s.dmediatype = 'Box' 
      and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
      and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
order by ...) 
where rownum <= 5000;