我有一张临时表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请各位指点一下我这个语句是否有问题,如何修正,又怎样查找没有更新的记录。
我使用的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请各位指点一下我这个语句是否有问题,如何修正,又怎样查找没有更新的记录。
(cardno NOT IN (SELECT cardno FROM yuechaxun))SELECT * FROM tempn WHERE
(cardno IN (SELECT cardno FROM yuechaxun))
--#2.yuechaxun表中可能存在20条temp表中没有的数据
SELECT * FROM yuechaxun WHERE cardno NOT IN(SELECT cardno FROM temp)
第一条查询为0,第二条查询为3100.你们都忽略了我的第一条insert语句,这是将总表中没有的记录先插入,因此,update时应该是3100才对,可是我不止一次发现update的记录数少于tempn中的数量
借用楼上的 select * from yuechaxun a join tempn b on a.cardno=b.cardno 看看记录有多少条?
这3100条记录 你是插入了20条 更新了3080条
这20条是你主表里面没有cardno 是tmp表中特有的
而3080条是主表和tmp表 都存在的 只是做了更新的操作
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
为什么?
如果tempn表中无cardno重复的记录,看似无可能
如果出现此情况,建议LZ查一查数据
tempn表的cardno是否设为主键