我正在编写一个带有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
感谢任何帮助。感谢
答案 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_id
,skill_id
和skill_description
值,但updated_date
不同,DISTINCT
会获得帮助;行内部查询中的行可能非常不同,但在外部查询中不再是不同的(如果您不在投影中包含updated_date
)。