Oracle内部查询

时间:2010-12-02 06:46:28

标签: oracle

我的查询

select kc.prod_id, kc.prod_actv_ts 
from   kit_cmpnt kc ,kit_cmpnt_stock kcs, prod p
where kc.cmpnt_cd='016' 
and   kcs.kit_cmpnt_nbr= kc.kit_cmpnt_nbr 
and   kcs.stock_id=1 
and   kcs.prod_id=kc.prod_id 
and   kcs.prod_actv_ts=kc.prod_actv_ts 
and   p.prod_id= kc.prod_id 
and   p.prod_actv_ts= kc.prod_actv_ts 
and   p.prod_inactv_ts is null;

我想获得kc.prod_id,kc.prod_actv_ts的独特组合

like distinct(kc.prod_id,kc.prod_actv_ts)

但我得到的是重复的prod_id和prod_actv_ts

的组合

请帮助

3 个答案:

答案 0 :(得分:2)

我按如下方式重构查询:

select kc.prod_id, kc.prod_actv_ts 
from   kit_cmpnt kc 
where  kc.cmpnt_cd='016' 
and exists
       (select 1 from kit_cmpnt_stock kcs 
        where kcs.stock_id=1 
        and    kcs.kit_cmpnt_nbr= kc.kit_cmpnt_nbr 
        and   kcs.prod_id=kc.prod_id 
        and   kcs.prod_actv_ts=kc.prod_actv_ts)
 and exists
       (select 1 from prod p
        where   p.prod_id= kc.prod_id 
        and   p.prod_actv_ts= kc.prod_actv_ts 
        and   p.prod_inactv_ts is null);

一般原则是你不应该在FROM子句中有一些东西,除非你从中获取一些东西。如果您没有从中获取任何内容,则它是一个过滤器,并且应该作为子查询在WHERE子句中。

答案 1 :(得分:0)

尝试使用select *查找重复项的原因。

答案 2 :(得分:0)

使用distinct来过滤独特的组合...... 例如.. 从表中选择distinct(a,b,c) 哪里 一些条件