1

次のステートメントでクエリを実行すると、Oracle SQL Developer IDE に重複したレコードが表示されます。

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が間違っていると推測していますか? しかし、私はそれに欠陥を見ませんか?

これは私の実行計画です:

実行計画

Mycurrency.currency_story_body.bodyは でCLOBstory_idは主キーではありません。ここで何をすべきですか?

4

1 に答える 1

0

currency_story_body に 2 つのレコードがあり、両方が同じ 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
于 2012-10-22T14:16:22.510 に答える