使用多个左外连接pl / sql

时间:2011-11-14 21:26:37

标签: oracle plsql

所以我有三个表,我试图通过以下查询来提取数据:

select tats.machine_interval_id as machine_interval_id,
       tats.interval_type as interval_type, 
       tats.interval_category as interval_category,
       ops.opstatemnemonic as operational_state, 
       nptc.categorytype as idle_category,
       tats.interval_duration as interval_duration
from temp_agg_time_summary tats
left outer join operationalstates ops on ops.opstateid=tats.operationalstatenumeric
left outer join nptcategories nptc on nptc.categoryid=tats.categorytypenumeric

我遇到的问题是,只要nptcategories表中的某个值不为空,它就会使记录加倍,从而抛弃我稍后在我的包中进行的任何计算。我认为问题与查询中有多个左外连接有关。我的问题可能看起来相当简单,但我是PL / SQL的新手,所以请耐心等待。

我想知道的是如何在查询中使用多个左外连接而不会出现此问题?构建此查询的更好方法是什么?

更新

好的,所以我在下面找到了令人讨厌的代码行:

left outer join nptcategories nptc on nptc.categoryid=tats.categorytypenumeric

此外,当使用distinct时,它会删除所有重复的记录,但是使用它会导致我不知道的任何问题吗?我是否应该更专注于弄清楚为什么上面的连接不能正常工作,或者是否足够好?

1 个答案:

答案 0 :(得分:0)

好的,所以在听完Wolf的建议后,我进去运行以下代码行

    select categorytype, count(*) 
from nptcategories 
group by categorytype 
having count(*) > 1;

运行之后,我发现在这个表中有一些重复的记录,所以通过删除重复项并将表设置为具有唯一ID来解决此问题。这是通过在DB上使用以下脚本完成的:

alter table nptcategories add constraint nptcatidunq unique(categoryid)