所以我有三个表,我试图通过以下查询来提取数据:
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时,它会删除所有重复的记录,但是使用它会导致我不知道的任何问题吗?我是否应该更专注于弄清楚为什么上面的连接不能正常工作,或者是否足够好?
答案 0 :(得分:0)
好的,所以在听完Wolf的建议后,我进去运行以下代码行
select categorytype, count(*)
from nptcategories
group by categorytype
having count(*) > 1;
运行之后,我发现在这个表中有一些重复的记录,所以通过删除重复项并将表设置为具有唯一ID来解决此问题。这是通过在DB上使用以下脚本完成的:
alter table nptcategories add constraint nptcatidunq unique(categoryid)