即数据表中数据为两条,但由于编码表的外联接查出三条数据来。
既然你知道了原因,那么为什么要用外联接呢?如果一定要用,那么加个条件,如某个字段 为 not null.
还有,如果可能,下次把表结构给出来,比较好!

解决方案 »

  1.   

    唯一的不同就是少了and b.dynam_trantype = 'DICT_PLANT'
      

  2.   

    select 
    c.plant_id,b.dynam_id,b.dynam_cname,'dynamotor' as equip_type,'d' as prefix,
    a.tdynam_v1,a.tdynam_v2,a.tdynam_v3,a.tdynam_v4,a.tdynam_v5,a.tdynam_v6,a.tdynam_v7,
    a.tdynam_v8,a.tdynam_v9,a.tdynam_v10,a.tdynam_v11,a.tdynam_v12,a.tdynam_v13,
    a.tdynam_v14,a.tdynam_v15,a.tdynam_v16,a.tdynam_v17,a.tdynam_v18,a.tdynam_v19,
    a.tdynam_v20,a.tdynam_v21,a.tdynam_v22,a.tdynam_v23,a.tdynam_v24 
    from dmislndata.trans_dynamotor24_2004 a,dmislndict.dict_dynamotor b,
    dmislndict.dict_plant c 
    where b.dynam_id = a.dynam_id(+)
    and c.plant_id = b.dynam_tranid
    and (to_char(a.tdynam_date,'yyyy-mm-dd') = '2004-11-12' or a.tdynam_date is null)
    and b.dynam_trantype = 'DICT_PLANT' 
    and c.plant_id = 1 
    order by b.dynam_id
    union 
    select 
    c.plant_id,b.dynam_id,b.dynam_cname,'dynamotor' as equip_type,'d' as prefix,
    a.tdynam_v1,a.tdynam_v2,a.tdynam_v3,a.tdynam_v4,a.tdynam_v5,a.tdynam_v6,a.tdynam_v7,
    a.tdynam_v8,a.tdynam_v9,a.tdynam_v10,a.tdynam_v11,a.tdynam_v12,a.tdynam_v13,
    a.tdynam_v14,a.tdynam_v15,a.tdynam_v16,a.tdynam_v17,a.tdynam_v18,a.tdynam_v19,
    a.tdynam_v20,a.tdynam_v21,a.tdynam_v22,a.tdynam_v23,a.tdynam_v24 
    from (select * from dmislndata.trans_dynamotor24_2004 where to_char(a.tdynam_date,'yyyy-mm-dd') = '2004-11-12') a,dmislndict.dict_dynamotor b,
    dmislndict.dict_plant c 
    where b.dynam_id = a.dynam_id(+)
    and c.plant_id = b.dynam_tranid
    and b.dynam_trantype = 'DICT_PLANT' 
    and c.plant_id = 1 
    order by b.dynam_id这样您看看吧