情况如下:我有两张表(A,B)
如此查询:select A.Caller,B.Name from A,B where A.ID=xxx and A.caller=B.Caller
这样查询出来的结果就是ID=XXX,且在B表中存在的数据。
我希望如果 “A.caller=B.Caller”这个条件不满足的时候,B.Name就等于“未知用户”。请问如何实现?

解决方案 »

  1.   

    select A.Caller,nvl(B.Name,'未知用户') from A,B where A.ID=xxx and A.caller=B.Caller(+);
      

  2.   

    select A.Caller,nvl(B.Name,'未知用户') 
    from A,B 
    where A.ID=xxx and A.caller=B.Caller(+)
    试试
      

  3.   

    select A.Caller,nvl(B.Name,'未知用户') 
      from A,B  
    where  A.ID=xxx 
      and  A.caller=B.Caller(+)主要考虑的是nvl函数的使用和左连接的使用,祝您好运
      

  4.   

    select A.Caller,nvl(B.Name,'未知用户') from  a right b on(A.caller=B.Caller)
    where A.ID='xxx'
      

  5.   

    对的 主要是 nvl和左(右)连接的问题
      

  6.   

    这个方法确实可以!B.fld_mobile(+)=A.caller or B.FLD_LINTON(+)=A.caller
    但是多写几个(+)就会报错:“ORA-01719: OR 或 IN 操作数中不允许外部联接运算符 (+)”
      

  7.   

    用了“or” 判断就会提示“ORA-01719: OR 或 IN 操作数中不允许外部联接运算符 (+)”,这个应该怎么去解决呢?
      

  8.   

    一个“+”号就可以了 
    如果非要的话:
    select A.Caller,nvl(B.Name,'未知用户') from A full outer join B on A.caller=B.Caller  
    where A.ID=xxx and;