选择Distinct Query Left JOIN,仍然在我的结果中获得重复项

时间:2016-08-05 15:00:24

标签: oracle

我正在编写一个带有distinct的select查询,但我的结果仍然是重复的。 Oracle View确实有重复项,我试图只返回该值的一次。

这是我的查询

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个特定技能描述值。

我的情况将获取值并为其设置代码。

当我使用&#39; distinct&#39;关键字,它会过滤掉重复项,但它不起作用。

这是我到目前为止的输出

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

感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:0)

问题是DISTINCT处于内层,可能重复项位于LEFT JOIN之外,您必须将DISTINCT子句放在第一个SELECT。< / p>

这应该给你欲望输出:

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

答案 1 :(得分:0)

您正在子查询中选择updated_date,但您不会在外部查询中使用它。问题:为什么?你的意思是用它来做某事,或许只能从表中选择最新的信息吗?

在任何情况下,如果您拥有相同的person_idskill_idskill_description值,但updated_date不同,DISTINCT会获得帮助;行内部查询中的行可能非常不同,但在外部查询中不再是不同的(如果您不在投影中包含updated_date)。