public JDBCResultSet getOrderInfo(String sdate,String edate,String o_order_type,String o_assign_flag,String o_process_flag,String o_time_flag,String todaydate)
    {
         StringBuffer error=new StringBuffer();
               
         String   sqlStr = "select  a.Order_id,a.Cust_name,a.Brh_id,a.Order_date,decode(a.Order_type,'1','信用卡','2','理财业务','3','信贷业务') ot,"
                  + "decode(a.Assign_flag,'0','未分派','1','已分派','2','已办结') af,b.V_USER_NM,"
                  + "a.Assign_date,a.Process_deadline,a.Process_request,decode(a.Process_flag,'0','未处理','1','洽谈中','2','已促成','3','未促成') pf,a.Process_dtl " 
                  + " from t_busi_order_dtl a ,sys_user b"
                  + " where a.Assign_opr_id=b.V_USER_ID";
        if(!sdate.equals(""))
                sqlStr = sqlStr + " and a.Order_date>='"+sdate+"'";
        if(!edate.equals(""))
                sqlStr = sqlStr + " and a.Order_date<='"+edate+"'";
                 
        if(!o_order_type.equals(""))
                sqlStr = sqlStr + " and a.Order_type='"+o_order_type+"'";
        if(!o_assign_flag.equals(""))
                sqlStr = sqlStr + " and a.Assign_flag='"+o_assign_flag+"'";
        if(!o_process_flag.equals(""))
                sqlStr = sqlStr + " and a.Process_flag='"+o_process_flag+"'";
        if(!o_time_flag.equals(""))
               { if(o_time_flag.equals("0"))
               sqlStr = sqlStr + " and a.Process_deadline < '"+todaydate+"' ";
               else if(o_time_flag.equals("1"))
               sqlStr = sqlStr + " and a.Process_deadline > '"+todaydate+"' ";
               }
        sqlStr = sqlStr + " order by  a.Order_date,a.Process_deadline,a.Order_type" ;
          JDBCResultSet rs = RunQry(sqlStr, error);
        if (!error.toString().equals(""))
        {
            System.out.println(error.toString());
            return null;
        }
        return rs; 
    }
关键就是红色的那些。这就2个表连接查询下,靠查询a表中Assign_opr_id字段等于b表中的V_USER_ID字段,然后查询出
b.V_USER_NM的值。
现在问题就是,如果a表中的Assign_opr_id为空的话,是不是这句查询语句就有问题,查不出数据?
PS:Assign_opr_id是允许为空的,B表中基本都不为空

解决方案 »

  1.   

    Assign_opr_id是关联字段,而且你这里用的是外连接,所以不可能出现为0的情况
      

  2.   

    Assign_opr_id这个字段在 开始添加数据的时候,可以为空,只是在后来的操作中有需要插入的数据的。
    现在问题就是,如果让Assign_opr_id这个字段为空的时候也可以通过这条查询语句查询出来,那要怎么改呢?
      

  3.   

    where a.Assign_opr_id(+) = b.V_USER_ID
      

  4.   

    外连接
    在这里恐怕不适用,你得到的也只是空值而已
    你把sql语句整理出来做个例子,描述下需求
    这样看着有点难受..
      

  5.   

    行,我说下吧,查询条件:有起始时间和终止时间,当前时间,然后还有其他的一些类型标记之类的,
    但是这个都已经实现了,查询的数据主要都在a表,唯一的一个在b表中的v_user_nm,这个名称
    然后问题就是Assign_opr_id与b.V_USER_ID 这2个字段的关联
    B表中存放人员的编号b.V_USER_ID 和名称v_user_nm
    a表的起初添加数据时,也注册页面时没有填数据到字段Assign_opr_id
    在后台操作的时候,给新添加的记录,分配一个人员,就会把编号b.V_USER_ID 填上,这个不是现在关注的问题,
    现在就是希望能查询返回数据,返回a表中的数据还有b表中v_user_nm这个字段,如果Assign_opr_id为空的话,那就不需要查B表了,页面上显示v_user_nm这个字段的地方,显示空的就行了
    有Assign_opr_id值,那就把v_user_nm值返回
    狂浪,你不是说Assign_opr_id为空关联这样不好么,现在只有靠他关联了,有什么方案可以参考?
      

  6.   

    大致了解了,将刚才的右连接换成左连接就行了
    where a.Assign_opr_id = b.V_USER_ID(+) 
    试试
      

  7.   

    这个是右连接。将a表中不符合连接条件的记录也列出。你查下外连接
    新问题是什么?数据库里能运行,就是java的问题了吧?