2012-12-14 31 views
1

我正在嘗試創建一個變量,它可以幫助我查找檢查點行,然後查詢該檢查點之後的行。Oracle SQL偏移行號

起初,我在考慮使用ROWID,但因爲ROWID的形式是非整數。這似乎有點不妥。

無論如何,一個必需的過程是創建一個行偏移未在甲骨文方便支持:

我不斷收到

ORA-00904:「項目」「ID」:無效的標識符

該變量是來自表ITEM的ID列的Item_ID。

select ITEM.ID,ITEM.CREATEDDATE,ITEM.TYPEID, 
     CAT_DIC_AUTHOR.DISPLAYENTRY, 
     CAT_DIC_PUBLISHER.DISPLAYENTRY, 
     CAT_DIC_KEYWORD.ACCESSENTRY,CAT_DIC_KEYWORD.DISPLAYENTRY, 
     CAT_DIC_LANGUAGE.DISPLAYENTRY,CAT_DIC_LANGUAGE.NAMEVIET, 
     CAT_DIC_SH.DISPLAYENTRY, 
     CAT_DIC_ITEM_TYPE.ACCESSENTRY,CAT_DIC_ITEM_TYPE.TYPENAME 
from (select rownum r,ITEM.ID from ITEM) 

LEFT JOIN ITEM_AUTHOR 
    ON ITEM.ID=ITEM_AUTHOR.ITEMID 
LEFT JOIN CAT_DIC_AUTHOR 
    ON ITEM_AUTHOR.AUTHORID=CAT_DIC_AUTHOR.ID 
LEFT JOIN ITEM_PUBLISHER 
    ON ITEM.ID=ITEM_PUBLISHER.ITEMID 
LEFT JOIN CAT_DIC_PUBLISHER 
    ON ITEM_PUBLISHER.PUBLISHERID=CAT_DIC_PUBLISHER.ID 
LEFT JOIN ITEM_KEYWORD 
    ON ITEM.ID=ITEM_KEYWORD.ITEMID 
LEFT JOIN CAT_DIC_KEYWORD 
    ON ITEM_KEYWORD.KEYWORDID=CAT_DIC_KEYWORD.ID 
LEFT JOIN ITEM_LANGUAGE 
    ON ITEM.ID=ITEM_LANGUAGE.ITEMID 
LEFT JOIN CAT_DIC_LANGUAGE 
    ON ITEM_LANGUAGE.LANGUAGEID=CAT_DIC_LANGUAGE.ID 
LEFT JOIN ITEM_SH 
    ON ITEM.ID=ITEM_SH.ITEMID 
LEFT JOIN CAT_DIC_SH 
    ON ITEM_SH.SHID=CAT_DIC_SH.ID 
LEFT JOIN CAT_DIC_ITEM_TYPE 
    ON ITEM.TYPEID=CAT_DIC_ITEM_TYPE.ID 

where r>100 and r<=200 
+0

你試過了'PARTITION BY'條款? – Rachcha

+0

你可以發佈實際的字符串q,而不僅僅是它的構建代碼嗎? –

+0

@ Ghita:更新! – MikeNQ

回答

2

嘗試如下子查詢後添加ITEM字:

select ITEM.ID,ITEM.CREATEDDATE,ITEM.TYPEID, 
     CAT_DIC_AUTHOR.DISPLAYENTRY, 
     CAT_DIC_PUBLISHER.DISPLAYENTRY, 
     CAT_DIC_KEYWORD.ACCESSENTRY,CAT_DIC_KEYWORD.DISPLAYENTRY, 
     CAT_DIC_LANGUAGE.DISPLAYENTRY,CAT_DIC_LANGUAGE.NAMEVIET, 
     CAT_DIC_SH.DISPLAYENTRY, 
     CAT_DIC_ITEM_TYPE.ACCESSENTRY,CAT_DIC_ITEM_TYPE.TYPENAME 
from (select rownum r,ITEM.ID,ITEM.TYPEID, ITEM.CREATEDDATE from ITEM) ITEM 

LEFT JOIN ITEM_AUTHOR 
    ON ITEM.ID=ITEM_AUTHOR.ITEMID 
LEFT JOIN CAT_DIC_AUTHOR 
    ON ITEM_AUTHOR.AUTHORID=CAT_DIC_AUTHOR.ID 
LEFT JOIN ITEM_PUBLISHER 
    ON ITEM.ID=ITEM_PUBLISHER.ITEMID 
LEFT JOIN CAT_DIC_PUBLISHER 
    ON ITEM_PUBLISHER.PUBLISHERID=CAT_DIC_PUBLISHER.ID 
LEFT JOIN ITEM_KEYWORD 
    ON ITEM.ID=ITEM_KEYWORD.ITEMID 
LEFT JOIN CAT_DIC_KEYWORD 
    ON ITEM_KEYWORD.KEYWORDID=CAT_DIC_KEYWORD.ID 
LEFT JOIN ITEM_LANGUAGE 
    ON ITEM.ID=ITEM_LANGUAGE.ITEMID 
LEFT JOIN CAT_DIC_LANGUAGE 
    ON ITEM_LANGUAGE.LANGUAGEID=CAT_DIC_LANGUAGE.ID 
LEFT JOIN ITEM_SH 
    ON ITEM.ID=ITEM_SH.ITEMID 
LEFT JOIN CAT_DIC_SH 
    ON ITEM_SH.SHID=CAT_DIC_SH.ID 
LEFT JOIN CAT_DIC_ITEM_TYPE 
    ON ITEM.TYPEID=CAT_DIC_ITEM_TYPE.ID 
where r>100 and r<=200 
+0

謝謝,但現在錯誤轉移到其他列「ORA-00904:」ITEM「。」TYPEID「:無效標識符」 – MikeNQ

+0

@MikeNQ我編輯了答案,請現在試試。 – Parado

+0

非常感謝,很好地工作。 – MikeNQ