A表:
A_ID BK_NO NAME
1     001   A
2     002   B
3     003   CB表:
B_ID BK_NO CHG_CODE
1    001    AAA
2    002    BBB
3    003    CCC
4           DDD
5           EEE
6    001    FFF怎样能查出如下:
A_ID BK_NO NAME B_ID BK_NO CHG_CODE
1     001   A    1     001   AAA
1     001   A    6     001   FFF
2     002   B    2     002   BBB
3     003   C    3     003   CCC
                 4           DDD
                 5           EEE
谢谢~

解决方案 »

  1.   

    对于前面能处理 select a.*,b.* from a inner join b on a.bk_no=b.bk_no,后面B_ID为4,5的记录如何处理?
      

  2.   

    select a.*,b.* from a full join b on a.bk_no=b.bk_no
      

  3.   

    select t1.*, t2.* from A表 t1 right join B表 t2 on t1.BK_NO = t2.BK_NO
      

  4.   

    D版已经答过了~
    Full Join
      

  5.   

    这样做用FULL JOIN 可以,但如果
    A表按条件呢?就不对了比如A表按条件:NAME为A的,
    查出要如下结果:
    A_ID BK_NO NAME B_ID BK_NO CHG_CODE
    1     001   A    1     001   AAA
    1     001   A    6     001   FFF
                     4           DDD
                     5           EEE
    这个语句怎么写呢?
      

  6.   

    也就是说:先从A表和B表查出结果集,再结合B表BK_NO为空的条件,得出一个结果集;不知道明不明白我的意思!
      

  7.   

    select t1.*, t2.* from A表 t1 right join B表 t2 on t1.BK_NO = t2.BK_NO where t1.[name] = 'A' or t2.BK_NO is null
      

  8.   


    select a.*,b.* from B表 b
    left join A表 a
    on a.bk_no=b.bk_no
      

  9.   

    Create Table A
    (A_ID Int,
     BK_NO Char(3),
     NAME Varchar(10))
    Insert A Select 1,     '001',   'A'
    Union All Select 2,     '002',   'B'
    Union All Select 3,     '003',   'C'Create Table B
    (B_ID Int,
     BK_NO Char(3),
     CHG_CODE Varchar(10))
    Insert B Select 1,    '001',    'AAA'
    Union All Select 2,    '002',    'BBB'
    Union All Select 3,    '003',    'CCC'
    Union All Select 4,          '',    'DDD'
    Union All Select 5,          '',    'EEE'
    Union All Select 6,    '001',    'FFF'
    GO
    --得到所有的
    Select 
    A.*, B.*
    From A
    Full Join B
    On A.BK_NO = B.BK_NO
    Order By (IsNull(A.A_ID, 1000000)), B_ID--得到NAME为A的
    Select 
    A.*, B.*
    From A
    Full Join B
    On A.BK_NO = B.BK_NO
    Where A.NAME = 'A' Or A.NAME Is Null
    Order By (IsNull(A.A_ID, 1000000)), B_ID
    Go
    Drop Table A,B
    ----Result
    /*
    A_ID BK_NO NAME B_ID BK_NO CHG_CODE
    1 001 A 1 001 AAA
    1 001 A 6 001 FFF
    2 002 B 2 002 BBB
    3 003 C 3 003 CCC
    NULL NULL NULL 4 DDD
    NULL NULL NULL 5 EEEA_ID BK_NO NAME B_ID BK_NO CHG_CODE
    1 001 A 1 001 AAA
    1 001 A 6 001 FFF
    NULL NULL NULL 4 DDD
    NULL NULL NULL 5 EEE
    */