有两个表,一个SBZL 一个CBJL 现在,要从SBZL里插入数据到CBJL中,条件是这样的,要求用户编号(YHBH)和水表编号(SBBH) 不在CBJL中的记录,要怎么做??
以下是表结构:(主要字段)
SBZL 表中:
                      YHBH            SBBH       KHMC
                     001001            001       张三
                     001002            001       任飘萍
                     001002            002       任飘萍
                     002001            001       十一郎
                     002001            002       十一郎
                     002002            001       江枫
                     002003            001       叶开
CBJL 表中:
                      YHBH            SBBH       KHMC
                     001001            001       张三
                     001002            001       任飘萍
                     001002            002       任飘萍
                     002003            001       叶开
要求查询的结束如下:   YHBH            SBBH       KHMC
                     002001            001       十一郎
                     002001            002       十一郎
                     002003            001       江枫
一定要帮帮我啊~~我晕,select * from sbzl where yhbh not in(select yhbh from cbjl)  这样的语句没有效果!!!不懂两个条件合起来要怎么写~!!!
                     

解决方案 »

  1.   

    补充一点,上面那条查询语句可以查询出那个结果,但问题是如果CBJL中有这个YHBH,但没有这个SBBH时查询不到结果,比如CBJL
      

  2.   

    不要用 yhbh not in 用noe exists(select ...)试试看!
      

  3.   

    晕,比如CBJL表中有十一郎其中的一条记录,但另一条记录不在表中,这时要查询出另一条记录要怎么写??
      

  4.   

    --这样试一下!
    SELECT * 
    FROM SBZL A
    WHERE NOT EXISTS
    ( SELECT 1 FROM CBJL WHERE YHBH=A.YHBH)
      

  5.   

    晕啊,查询出来了,可怎么插入时有错啊,运行都通不过`
    insert into cbjl(khmc,yhbh,sbbh,yslx,dj,qsds,zzds,ysl,ssqy,nd,yf,sfycb)
    select sbzl.khmc,sbzl.yhbh,sbzl.sbbh,sbzl.yslx,sbzl.sj,0,0,0,sbzl.ssqy,
            '2006' as nd,'9' as yf,0 from sbzl A ,cbjl
             WHERE NOT EXISTS( SELECT yhbh FROM CBJL WHERE YHBH=A.YHBH and sbbh=A.sbbh)
      

  6.   

    --这样试一下!不行贴出错误 !
    insert into cbjl(khmc,yhbh,sbbh,yslx,dj,qsds,zzds,ysl,ssqy,nd,yf,sfycb)select sbzl.khmc,sbzl.yhbh,sbzl.sbbh,sbzl.yslx,sbzl.sj,0,0,0,sbzl.ssqy,
            '2006' as nd,'9' as yf,0 
    from sbzl A 
             WHERE NOT EXISTS( SELECT 1 FROM CBJL WHERE YHBH=A.YHBH and sbbh=A.sbbh)
      

  7.   

    你这样可以的,但是可不可以改成这样:
    insert into cbjl(khmc,yhbh,sbbh,yslx,dj,qsds,zzds,ysl,ssqy,nd,yf,sfycb)
    select  sbzl.khmc,sbzl.yhbh,sbzl.sbbh,sbzl.yslx,sbzl.sj,cbjl.zzds,cbjl.zzds ,cbjl.ysl ,cbjl.ssqy,'2006' as nd,'10' as yf,0 as sfycb from sbzl A,cbjl
             WHERE NOT EXISTS( SELECT yhbh,sbbh FROM CBJL WHERE YHBH=A.YHBH and sbbh=A.sbbh and yf='10') 
    主要是我想取SBZL里面的QSDS和ZZDS两个值,不让它插入时为0!!
      

  8.   

    晕,要怎么生成结果集呀?SQL太菜了我,情况是这样的,一种是插入所有的新增记录,就是采用你那种方法,那两个值默认为0(因为要插入的记录在CBJL中没有上月记录).另一种就是单个用户,但要考虑到一个用户有两个表时,只要插入其中一个表的记录,并且要取该用户该表的上月的QSDS和ZZDS,如果该用户只有一个表,则会比较好办一点~~!
    自己都搞晕了~~
      

  9.   

    问题解决了,谢谢你了liangpei2008(逍遥叹),呵~~这是我用的方法,直接从CBJL中取数据就可以了
    INTO cbjl(KHMC, YHBH, SBBH, YSLX, DJ, QSDS, ZZDS, YSL, SSQY,cby, ND, YF, SFYCB)
    SELECT KHMC, YHBH, SBBH, YSLX, dj, ZZDS, ZZDS , 0 , SSQY, cby,2006 AS nd, 10 AS yf, 0 FROM cbjl WHERE  YHBH + SBBH NOT IN (SELECT YHBH + SBBH FROM CBJL WHERE yf = 10 and nd=2006)
    and (cbjl.YF = 9 AND (cbjl.ND = 2006) and yhbh=001001  这里是按单个用户进行操作的~~