2016-08-05 24 views
0

我正在寫一個選擇查詢與不同,但我仍然在我的結果中得到重複。 Oracle視圖確實有重複內容,我試圖找回該值的只有一次。選擇獨特查詢左加入,仍然得到重複我的結果

這裏是我的查詢

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的價值,所以我添加IN子句來篩選15 - 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 WITHOUT ERRORS之前發佈的任何問題,然後再回答所需的輸出。 – mathguy

回答

0

問題是DISTINCT是在內部水平,並且可能重複在LEFT JOIN之外,您必須將DISTINCT子句放在第一個SELECT中。

這應該給你的願望輸出:

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_dateDISTINCT不會幫助;內部查詢中的行可能非常不同,但在外部查詢中不再有區別(如果在投影中不包含updated_date)。