2016-08-05 7 views
0

私は別個の選択クエリを書いていますが、私の結果に重複が残っています。 Oracle Viewには重複があり、その値が1回だけ返されるようにしています。ここでDistinct Query Left JOINを選択しましたが、まだ結果が重複しています

は私のクエリは

select 
person.person_id, 
person.last_name, 
person.first_name, 
person.first_name, 
person.middle_name, 
skill.skills_id, 
(case 
when trim(skills.skill_description) = 'typing fast' then 'TP1' 
when trim(skills.skill_description) = 'courier district 9' then 'CD9' 
when trim(skills.skill_description) = 'helpdesk shift 3' then 'HD3' 
when trim(skills.skill_description) = 'helpdesk shift 5' then 'HD5' 
.... 
else '' 
end) AS skill_description 
from person_view person 
left join (select distinct person_id, skill_id, skill_description, updated_date 
from skill_view) skills 
on skills.person_id = person.person_id and 
((trunc(sysdate) - PHONE.UPDATED_DT <= 1)) and 
trim(skills.skill_description) in ('skill1', 'skill2', 'skill3' ...) 

でありskill_descriptionの値の多くがあるので、私は15個のためにフィルタリングするためにIN句を追加 - 20特定skill_description値。

私の場合、値を受け取り、そのコードを設定します。

「distinct」キーワードを使用したときに重複を除外すると思っていましたが、動作しません。ここで

は私の出力は、すべてのヘルプは高く評価され、これまで

105 John E Doe SKILL1 

105 John E Doe SKILL1 

105 John E Doe SKILL2 

105 John E Doe SKILL2 

105 John E Doe SKILL3 

105 John E Doe SKILL3 

です。おかげ

+0

? PHONE.UPDATED_DTについて何かを追加するように編集しましたが、PHONEテーブルについては言及していません。どうしたの?希望の出力を返さない質問をする前に、エラーなしでCOMPILESを投稿してください。 – mathguy

答えて

0

問題はDISTINCTがインナーレベルにあり、多分重複がLEFT JOIN外にある場合、あなたは最初SELECTDISTINCT句を置く必要があります。

これは、あなたの欲望の出力を与える必要があります。

SELECT DISTINCT 
     person.person_id, 
     person.last_name, 
     person.first_name, 
     person.first_name, 
     person.middle_name, 
     skill.skills_id, 
OMMITED CODE... 
0

あなたはサブクエリでupdated_dateを選択されていますが、外側のクエリでは使用しないでください。質問:なぜですか?おそらく、テーブルから最新の情報だけを選択するために、何かのためにそれを使用することを意味しましたか?いずれの場合においても

、あなたが同じperson_idskill_idskill_description値が異なるupdated_dateを持っている場合、DISTINCTは助けにはなりません。行は内側のクエリで非常に明確に区別されますが、外側のクエリでは区別されなくなります(投影にupdated_dateが含まれていない場合)。

関連する問題