SELECT YJ_YB01.YBBH,   
         GY_KSDM.KSDM,  
         GY_KSDM.KSMC,  
         YJ_YB01.SJYF,   
         YJ_YB01.YBZT,   
         YJ_YB01.SBSJ,   
         YJ_YB01.ZDGH,   
         YJ_YB01.TJGH  
    FROM YJ_YB01,GY_KSDM 
WHERE   YJ_YB01.KSDM(+) =  GY_KSDM.KSDM  AND ( YJ_YB01.SJYF>=:adt_start and YJ_YB01.SJYF<=:adt_end ) AND
        GY_KSDM.YBSBSY=1 

解决方案 »

  1.   

    不支持(+)这是在oracle里代码?在sql里要用*来代替(+),在oracle产生不了数据,在sql里能产生数据
      

  2.   

    --这样修改下:
    SELECT YJ_YB01.YBBH,   
           GY_KSDM.KSDM,   
           GY_KSDM.KSMC,   
           YJ_YB01.SJYF,   
           YJ_YB01.YBZT,   
           YJ_YB01.SBSJ,   
           YJ_YB01.ZDGH,   
           YJ_YB01.TJGH   
    FROM YJ_YB01 right join GY_KSDM  
    ON YJ_YB01.KSDM = GY_KSDM.KSDM 
    WHERE ( YJ_YB01.SJYF>=:adt_start and YJ_YB01.SJYF<=:adt_end ) 
    AND GY_KSDM.YBSBSY=1  
      

  3.   

    不行是什么意思?没数据select出来,还是报错?
    会不会你本来就select不出数据啊
      

  4.   

    在SQL数据库里能产生数据,在oracle,你说的这个方式我也用了,还是产生不出数据,
      

  5.   

    表YJ_YB01的字段SJYF是什么类型?
      

  6.   

    SELECT YJ_YB01.YBBH,  
      GY_KSDM.KSDM,  
      GY_KSDM.KSMC,  
      YJ_YB01.SJYF,  
      YJ_YB01.YBZT,  
      YJ_YB01.SBSJ,  
      YJ_YB01.ZDGH,  
      YJ_YB01.TJGH  
      FROM YJ_YB01,GY_KSDM 
    WHERE YJ_YB01.KSDM(+) = GY_KSDM.KSDM AND ( YJ_YB01.SJYF>=:adt_start and YJ_YB01.SJYF<=:adt_end ) AND
      GY_KSDM.YBSBSY=1  YJ_YB01.KSDM(+) = GY_KSDM.KSDM
    ( YJ_YB01.SJYF>=:adt_start and YJ_YB01.SJYF<=:adt_end )
    GY_KSDM.YBSBSY=1  
    这3个条件一个一个的去掉 ,看看是哪个出的问题,然后再分析原因
      

  7.   

    SELECT YJ_YB01.YBBH,   
      GY_KSDM.KSDM,   
      GY_KSDM.KSMC,   
      YJ_YB01.SJYF,   
      YJ_YB01.YBZT,   
      YJ_YB01.SBSJ,   
      YJ_YB01.ZDGH,   
      YJ_YB01.TJGH   
      FROM YJ_YB01,GY_KSDM  
    WHERE YJ_YB01.KSDM(+) = GY_KSDM.KSDM AND ( YJ_YB01.SJYF>=:adt_start and YJ_YB01.SJYF<=:adt_end ) AND
      GY_KSDM.YBSBSY=1  
    :adt_start 和 :adt_end 用具体的值代替看看 有数据出来不?
      

  8.   

    把where 里的检索条件去掉,只留下来右连接,就能产生数据
      

  9.   

    YJ_YB01.SJYF>=:adt_start and YJ_YB01.SJYF<=:adt_end 这个地方 你去仔细看看  不过看你的意思估计是时间的字段 自己匹配下
      

  10.   

    这样试试
    (YJ_YB01.KSDM(+) = GY_KSDM.KSDM  AND GY_KSDM.YBSBSY=1 ) or ( YJ_YB01.SJYF>=:adt_start and YJ_YB01.SJYF<=:adt_end )有数据就说明 我上的问题验证了
      

  11.   

    SJYF  是什么类型的字段,是日期类型吗? 若是 用to_char()函数试试。
      

  12.   

    问题定位在过滤条件上,应该不用管连接了,直接查基表 GY_KSDM 定位出哪个条件下没有数据楼主还是先确定一下大家的怀疑,sqlserver 和 oracle 环境下,这几张表是否一致,包括表结构定义 和 数据。环境都不一样的话,这个情况就复杂了。
      

  13.   

    不产生数据,这个也来问我汗,又没有报错,明显的是WHERE子句或者连接条件有错误
      

  14.   

    sqlserver用*,或者left,right join把