2012-10-22 29 views
1

我得到我的Oracle SQL Developer IDE重複的記錄,每當我與這個說法查詢:獲取重複記錄在Oracle中CLOB屬性

SELECT currency.currency_story.story_id, 
     currency.currency_story.datetimestamp, 
     currency.currency_story.headline, 
     currency.currency_story_body.body 
FROM 
     currency.currency_story INNER JOIN 
     currency.currency_story_body ON 
     currency.currency_story.story_id = currency.currency_story_body.story_id 
WHERE 
     currency.currency_story.datetimestamp > '18-Oct-12' AND 
     SUBSTR(currency.currency_story.story_id,10,4) > '1825' 
ORDER BY 
     currency.currency_story.datetimestamp ASC 

所以運行底部聲明這兩個表後(currency_story & currency_story_body)我得到0行取出來:

select currency.currency_story_body.story_id 
    from currency.currency_story_body 
    group by currency.currency_story_body.story_id 
    having count(*) > 1 

同我做了currency_story表也和我有0行牽強。現在我知道每個表格中都沒有重複的記錄。所以我猜我的JOIN是錯了?但我沒有看到它的缺陷?

這是我的執行計劃:

Execution Plan

currency.currency_story_body.bodyCLOBstory_id不是主鍵。我應該在這裏做什麼?

+2

由於'story_id'不是'PRIMARY KEY',你確定它的價值是兩個表中是唯一的? –

+1

感謝您的編輯弗朗西斯。 –

+0

我很抱歉我沒有處理數據庫。我應該如何在Oracle SQL Developer中檢查story_id是否爲PK?\ –

回答

0

如果您在currency_story_body中有兩條記錄,它們具有相同的story_id會導致重複。

您沒有使用currency_story_body除了在任何地方加入,所以你可以嘗試:

SELECT currency.currency_story.story_id, 
    currency.currency_story.datetimestamp, 
    currency.currency_story.headline, 
    currency.currency_story.body 
FROM 
    currency.currency_story 
WHERE 
    currency.currency_story.datetimestamp > '18-Oct-12' AND 
    SUBSTR(currency.currency_story.story_id,10,4) > '1825' 
ORDER BY 
    currency.currency_story.datetimestamp ASC 
+0

通過編輯,SQL不再有效。但是,原則可能是相同的。重複將是合法的。 –

+0

其實他在他的SELECT語句中使用'currency_story_body.body'。 –

+0

是的!那是對的。 –