我有一张临时表temp,一张总表yuechaxun,temp表每天自动更新,然后我再将temp中的数据更新到总表中。可是我发现有时temp中的数据不能全部更新到总表中,例如temp中有3100条记录,但更新到总表中却提示只有3080条记录被更新,不知道是什么原因,也不知道如何找到没有更新的记录。
我使用的sql语句如下:
INSERT INTO yuechaxun SELECT * FROM tempn WHERE 
(cardno NOT IN (SELECT cardno FROM yuechaxun))
然后
UPDATE yuechaxun SET money = tempn.money FROM yuechaxun, tempn
WHERE yuechaxun.cardno = tempn.cardno请各位指点一下我这个语句是否有问题,如何修正,又怎样查找没有更新的记录。

解决方案 »

  1.   

    temp表里只有3080条数据的cardno在yuechaxun里有啊。
      

  2.   

    有where 条件,不完全更新很正常!
      

  3.   

    看下这两句各有多少条记录?SELECT * FROM tempn WHERE  
    (cardno NOT IN (SELECT cardno FROM yuechaxun))SELECT * FROM tempn WHERE  
    (cardno IN (SELECT cardno FROM yuechaxun))
      

  4.   

    --#1.你的更新没有问题
    --#2.yuechaxun表中可能存在20条temp表中没有的数据
    SELECT * FROM yuechaxun WHERE cardno NOT IN(SELECT cardno FROM temp)
      

  5.   


    第一条查询为0,第二条查询为3100.你们都忽略了我的第一条insert语句,这是将总表中没有的记录先插入,因此,update时应该是3100才对,可是我不止一次发现update的记录数少于tempn中的数量
      

  6.   

    用 select * from yuechaxun a join tempn b on a.cardno=b.cardno 查询看有多少条。
      

  7.   

    第一条查询为0,第二条查询为3100.你们都忽略了我的第一条insert语句,这是将总表中没有的记录先插入,因此,update时应该是3100才对,可是我不止一次发现update的记录数少于tempn中的数量你的第一条语句是 根据cardno把 tmp表中的记录插入到总表,where条件是cardno在主表中没记录!
    借用楼上的 select * from yuechaxun a join tempn b on a.cardno=b.cardno 看看记录有多少条?
      

  8.   

    楼主多虑了 
    这3100条记录 你是插入了20条 更新了3080条
    这20条是你主表里面没有cardno 是tmp表中特有的
    而3080条是主表和tmp表 都存在的 只是做了更新的操作
      

  9.   

    我做了个实验 当tmp表里面的cardno 为NULL的时候就有这个问题 不知道楼主的cardno里面有没有NULL值
      

  10.   


    select count(*) from yuechaxun a join tempn b on a.cardno=b.cardno 
    是3100
    select count(*) from tempn
    也是3100
    但UPDATE yuechaxun SET money = tempn.money FROM yuechaxun, tempn
    WHERE yuechaxun.cardno = tempn.cardno
    就只有3080
    为什么?
      

  11.   

    SELECT *  FROM tempn WHERE  (cardno NOT IN (SELECT cardno FROM yuechaxun)) 也是3100条记录吗?
      

  12.   

    这样的问题估计是tempn表中cardno有重复或者cardno值为null
    如果tempn表中无cardno重复的记录,看似无可能
    如果出现此情况,建议LZ查一查数据
    tempn表的cardno是否设为主键