select * 
from (
        select B.id
               ,A.name1
               ,B.name2
        from catalog1 A
        join catalog2 B on B.parent_id=A.id1
        union
        select id1,name1,name1 from catalog1
     )t
order by id

解决方案 »

  1.   

    select * from 
    (select id=a.id2,
    b.name1,
    a.name2
    from catalog2 a left join catalog1 b on b.id1=a.parent_id
    union all
    select * from catalog1
    ) a order by id
      

  2.   

    --测试数据
    create table catalog1(id1 varchar(10),name1 varchar(20) )
    insert catalog1 select  'A','亚洲'
    insert catalog1 select  'B','欧洲'
    create table catalog2(id2 varchar(10),name2 varchar(20),parent_id varchar(10) )
    insert catalog2 select 'A1','东亚','A'
    insert catalog2 select 'A2','西亚','A'
    insert catalog2 select 'A3','其他','A'
    insert catalog2 select 'B1','东欧','B'
    insert catalog2 select 'B2','西欧','B'
    insert catalog2 select 'B3','其他','B'--查询
    select id1 id,name1,name1 name2 from catalog1 
    union 
    select b.id2 id,a.name1 name1,b.name2 name2 from catalog1 a,catalog2 b where a.id1=b.parent_id 
    order by id--结果
    id         name1                name2                
    ---------- -------------------- -------------------- 
    A          亚洲                   亚洲
    A1         亚洲                   东亚
    A2         亚洲                   西亚
    A3         亚洲                   其他
    B          欧洲                   欧洲
    B1         欧洲                   东欧
    B2         欧洲                   西欧
    B3         欧洲                   其他(所影响的行数为 8 行)