各位大侠,劳烦帮忙,先行谢过。我有一个oracle的查询语句,我想要和到此查询语句对应的mysql的查询语句,因为我有一个oracle的表和一个mysql的表,两个表的字段是一样的,我想要用下面的查询语句在mysql中进行查询,但是里面有一些oracle特有的函数,所以想请教一下,mysql中该如何写呢?Oracle的查询语句如下:
select CALL_TYPE,USER_NUMBER,nvl(a.free_res_val1,0)+ nvl(a.free_res_val2,0)+ nvl(a.free_res_val3,0) free_res_val1 
from JF.SMS_L a ,jf.dr_type_def c where 1=1  and ( a.dr_type=c.dr_type_id(+) ) 
and  user_number = '1111111' and  1=1  and  (dr_type = 101  and final_state = 1 );其中,主要是vnl函数mysql中没有,还有a.dr_type=c.dr_type_id(+)中最后的(+)我也不清楚是什么意思?

解决方案 »

  1.   

    select CALL_TYPE,USER_NUMBER,nvl(a.free_res_val1,0)+ nvl(a.free_res_val2,0)+ nvl(a.free_res_val3,0) free_res_val1 
    from JF.SMS_L a ,jf.dr_type_def c where 1=1  and ( a.dr_type=c.dr_type_id(+) ) 
    and  user_number = '1111111' and  1=1  and  (dr_type = 101  and final_state = 1 ); \\
    改为:select CALL_TYPE,USER_NUMBER,ifnull(a.free_res_val1,0)+ ifnull(a.free_res_val2,0)+ ifnull(a.free_res_val3,0) free_res_val1 
    from JF.SMS_L a left outer join jf.dr_type_def c on a.dr_type=c.dr_type_id
     where 1=1   and user_number = '1111111' and  1=1  and  (dr_type = 101  and final_state = 1 ); 
      

  2.   

    select CALL_TYPE,
           USER_NUMBER,
           coalesce(a.free_res_val1, 0) + nvl(a.free_res_val2, 0) +
           coalesce(a.free_res_val3, 0) free_res_val1
      from JF.SMS_L a
      left outer join jf.dr_type_def c on a.dr_type = c.dr_type_id
     where 1 = 1
          -- and (a.dr_type = c.dr_type_id(+))
       and user_number = '1111111'
       and 1 = 1
       and (dr_type = 101 and final_state = 1);
    试试
      

  3.   

    没记错的话 nvl=isnull,   (+)在右边的=left join
      

  4.   

    NVL()函数:如果第一个值为空,就取第二个值,如:nvl(a,b),如果a为空,则取b的值a.dr_type=c.dr_type_id(+)表示右连接
    a.dr_type(+)=c.dr_type_id表示左连接
      

  5.   

    忘 了还有个连接串select CALL_TYPE,
           USER_NUMBER,
          CONCAT( coalesce(a.free_res_val1, 0)+ nvl(a.free_res_val2, 0) ,
           coalesce(a.free_res_val3, 0)) free_res_val1
      from JF.SMS_L a
      left outer join jf.dr_type_def c on a.dr_type = c.dr_type_id
     where 1 = 1
          -- and (a.dr_type = c.dr_type_id(+))
       and user_number = '1111111'
       and 1 = 1
       and (dr_type = 101 and final_state = 1);
      

  6.   

    非常感谢各位的回复,尤其要感谢1楼的cosio,我只试了试1楼的答案,可行,完成正确。同时也非常感谢其它的各位回复,再次感谢。