create table curbh
(
   bh varchar(20),
   xmbh varchar(10)
)create table bhk
(
   xmbh varchar(10))insert curbh values('001','Al')
insert curbh values('001','Mg')
insert curbh values('001','Fe')
insert curbh values('002','Ca')
insert curbh values('002','Mg')
insert curbh values('002','Cu')
insert curbh values('002','Al')
insert bhk values('Al')
insert bhk values('Mg')
insert bhk values('Fe')
insert bhk values('Ca')
insert bhk values('Cu')
insert bhk values('Ag')
insert bhk values('Au')现在要实现 001 在 bhk 中 没有的项目 Ca Cu Ag Au
002 在 bhk 中没有的项目 Fe Ag Au
要列出这样的结果
                   001  Ca 
                001  Cu 
                001  Ag 
                001  Au 
                002  Fe
                002  Ag
                002  Au各路神仙大侠帮忙 谢谢!
                   

解决方案 »

  1.   

    create table curbh 

      bh varchar(20), 
      xmbh varchar(10) 
    ) create table bhk 

      xmbh varchar(10) ) insert curbh values('001','Al') 
    insert curbh values('001','Mg') 
    insert curbh values('001','Fe') 
    insert curbh values('002','Ca') 
    insert curbh values('002','Mg') 
    insert curbh values('002','Cu') 
    insert curbh values('002','Al') 
    insert bhk values('Al') 
    insert bhk values('Mg') 
    insert bhk values('Fe') 
    insert bhk values('Ca') 
    insert bhk values('Cu') 
    insert bhk values('Ag') 
    insert bhk values('Au') SELECT *
    FROM (
        SELECT *
        FROM (SELECT DISTINCT bh FROM curbh) AS A
            CROSS APPLY bhk
    ) AS A
    WHERE NOT EXISTS(SELECT * FROM curbh WHERE bh=A.bh AND xmbh=a.xmbh)DROP TABLE curbh,bhk/*
    bh                   xmbh
    -------------------- ----------
    001                  Ca
    001                  Cu
    001                  Ag
    001                  Au
    002                  Fe
    002                  Ag
    002                  Au(7 行受影响)
    */
      

  2.   

    create table curbh ( bh varchar(20), xmbh varchar(10)) 
    go
    create table bhk (xmbh varchar(10)) 
    go
    insert curbh values('001','Al') 
    insert curbh values('001','Mg') 
    insert curbh values('001','Fe') 
    insert curbh values('002','Ca') 
    insert curbh values('002','Mg') 
    insert curbh values('002','Cu') 
    insert curbh values('002','Al') 
    insert bhk values('Al') 
    insert bhk values('Mg') 
    insert bhk values('Fe') 
    insert bhk values('Ca') 
    insert bhk values('Cu') 
    insert bhk values('Ag') 
    insert bhk values('Au') 
    go
    select distinct * from (select a.bh,b.xmbh  from curbh a cross join bhk b) c where not exists(select 1 from curbh where bh=c.bh and xmbh=c.xmbh) order by c.bh,c.xmbh
    /*
    bh                   xmbh       
    -------------------- ---------- 
    001                  Ag
    001                  Au
    001                  Ca
    001                  Cu
    002                  Ag
    002                  Au
    002                  Fe
    */
    drop table curbh,bhk
    go
      

  3.   

    应该是CROSS JOINSELECT *
    FROM (
        SELECT *
        FROM (SELECT DISTINCT bh FROM curbh) AS A
            CROSS JOIN bhk
    ) AS A
    WHERE NOT EXISTS(SELECT * FROM curbh WHERE bh=A.bh AND xmbh=a.xmbh)
      

  4.   

    反应好块
    刚发 就有人回答
    谢谢
    但是我用的是 SQL 2000 
    稍微改动一下:
    SELECT *
    FROM (
        SELECT *
        FROM (SELECT DISTINCT bh FROM curbh) AS A, bhk
    ) AS A
    WHERE NOT EXISTS(SELECT * FROM curbh WHERE bh=A.bh AND xmbh=a.xmbh)
      

  5.   

    高手都给了答案,我就贴些联接的基础知识吧。cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数
    left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null
    right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null 
    full join 返回两张表中的行 left join+right join
    inner join 只返回两张表连接列的匹配项
      

  6.   

    create table curbh (bh varchar(20),xmbh varchar(10)) 
    create table bhk (xmbh varchar(10)) 
    insert curbh values('001','Al') 
    insert curbh values('001','Mg') 
    insert curbh values('001','Fe') 
    insert curbh values('002','Ca') 
    insert curbh values('002','Mg') 
    insert curbh values('002','Cu') 
    insert curbh values('002','Al') 
    insert bhk values('Al') 
    insert bhk values('Mg') 
    insert bhk values('Fe') 
    insert bhk values('Ca') 
    insert bhk values('Cu') 
    insert bhk values('Ag') 
    insert bhk values('Au') select distinct * 
    from (select a.bh,b.xmbh from curbh a ,bhk b ) t
    where not exists(select 1 from curbh where bh=t.bh and xmbh=t.xmbh)drop table curbh,bhkbh                   xmbh
    -------------------- ----------
    001                  Ag
    001                  Au
    001                  Ca
    001                  Cu
    002                  Ag
    002                  Au
    002                  Fe(7 行受影响)