select 
    a.姓名 姓名,
    b.区划 籍贯,
    c.区划 现住所 
from 
    A表 a,
    B表 b,
    B表 c 
where 
        a.籍贯=b.代码(+) 
    and a.现住所=c.代码(+)

解决方案 »

  1.   

    select a.姓名,(select 代码 from b where b.代码=a。籍贯)籍贯,(select 代码 from b where b.代码=a。现住所)现住所 from a
      

  2.   

    问dinya2003(OK):
    第一个表中两个字段的代码同在第二个表中,上面的写法好象不妥。
      

  3.   

    b表数据量应该不大,可以考虑使用嵌套查询
    select 姓名,(select 名称 from b where b.名称=a.籍贯) 籍贯,
    (select 名称 from b where b.名称=a.出生地) 出生地
    from a;
      

  4.   

    SELECT 
       姓名
       ,(SELECT 名称 FROM b WHERE 代码 = a.籍贯) 籍贯
       ,(SELECT 名称 FROM b WHERE 代码 = a.出生地) 出生地
    FROM a;
      

  5.   

    select a.姓名,(select 代码 from b where b.代码=a.籍贯)籍贯,(select 代码 from b where b.代码=a.现住所)现住所 from a
      

  6.   

    dinya2003(OK)和fuzhou77(浮舟)的方法我都试了一下,都可行。但哪位能帮助分析一下两者分别在什么环境下更适合使用么?
      

  7.   

    提倡dinya2003(OK)的方法。很典型的用法,很容易理解,我现在的项目中就是这么用的。
    而fuzhou77(浮舟)的方法使用内部视图,oracle之外就不支持了。select 
        a.姓名 姓名,
        b_1.区划 籍贯,
        b_2.区划 现住所 
    from 
        A a,
        B b_1,
        B b_2 
    where 
            a.籍贯=b_1.代码(+) 
        and a.现住所=b_2.代码(+)
      

  8.   

    fightintokyo,高!
    顺带问一句,内部视图和嵌套查询有什么不同和联系?在oracle之外不支持?不属于标准SQL么?