只能比较相同字段吧?如果是这样可以用recordset啊!

解决方案 »

  1.   

    利用如下语句:
        select tabsource.字段名 from tabsource,tabtemp where tabsource.a=tabtemp.a and tabsource.b =tabtemp.b ...
    这样就两表中相同的记录找出,其余的就是不同的记录,然后再利用循环,select,insert等语句
    就可以了。
      

  2.   

    select * into tmpsend from tabsource 
    where FieldName not in (Select FieldName From tabtemp)
      

  3.   

    用 not in 非常慢
    oracle好像有求交集,并集的语句,SQL Server有没有不知道
      

  4.   

    ozw(沧浪客):能不能在给一点思路??谢谢了。。
      

  5.   

    这是SQL Server提供的例子
    USE pubs
    SELECT DISTINCT city
    FROM authors
    WHERE NOT EXISTS
        (SELECT *
        FROM publishers
        WHERE authors.city = publishers.city)或者
    USE pubs
    SELECT DISTINCT city
    FROM authors
    WHERE city NOT IN
        (SELECT city 
        FROM publishers)
      

  6.   

    其实你没有说得很清楚。
    1、两个表中不同的记录,是通过什么来比较?要想比较,这两个表都有相同的关键字段。比较时根据关键字段相等的记录,判断其他字段内容,若不同,就将记录送到第三个表中去,你是这个意思吗?
    2、若是A表中有该关键字,B表中没有,A中的记录送不送到C表中去?
    3、若是B表中有该关键字,A表中没有,B中的记录送不送到C表中去?
    4、若AB 表中都有该关键字,但其他字段内容不同,是将A的记录送到C中去,还是将B的记录送到C中去?这些你都没有说清楚,实在是不好回答。不是没有办法,而是你要先将问题讲清楚。
      

  7.   

    有两个数据库,分别有两个表,这两个数据库中的表不能添加字段,而且有很多不同。只能对数据进行读取,要比较两个表,将不同的数据发送到第三个表中。
    如:::tabsource(源数据库的表)
            tabtemp(临时数据库的表)
            tabsend(临时数据库中的表)
    就是比较tabsource 和tabtemp这两个表,将不同的数据发送到tabsend表中。
    注意!tabsource 和tabtemp没有关联,没有主健。比较的结果是将tabsource(源数据库的表)于tabtemp比较结果的数据(tabsource是数据源的表,tabtemp是临时数据库中的表)发送到tabsend中。
    关键是如何将不同的数据选出来。然后把数据放到tabsend中。谢谢!!我很着急!!!!
      

  8.   

     hz1101(我学!我学!!我学!!!...):谢谢了!!你的思路很好!只是我忘了告诉你一个实际情况!
    其实,我一共有8个表,每个表有5万多条数据。这样做你看是否。
    程序要运行在300的cpu上
      

  9.   

    to:hz1101 你所说的好像第三步有问题,最终结果是A中有的B中美有的也给删掉了,
    应该是查找重复的记录(最好是排序)然后把重复的两条记录都删除掉,如果是8个表
    那么只能是看重复的每一记录有多少条如果有8条则全部删除掉,如果有7个呢则之删除6个就可以了,如果考虑到数据量的问题可以分成4组然后比较.
      

  10.   

    1 将第一个表全部到临时表tabsend;
    2 delete from tabsend where ? in (select ? from tabtemp)
      剩下的就是不同的记录。?处是你判断是否删除的关键字段。
      在SQLSERVER2000下速度还行,不知你能用否?
      

  11.   

    怎么不见动静了?说白了就是:
    insert into tabsend select * from tabsource
    go
    delete from tabsend where ? in (select ? from tabtemp)
    go  
    在PIII500上这么删5万条记录大概十秒以内吧!应该说速度可以了。
    但别说你用的是ORACLE8啊,那就慢了。
      

  12.   

    我是睡觉的时候想到的,不知行不行,试试!
    select 字段名 into tabsend from tabsource where tabsource.字段名 <> tabtemp.字段名
    inner join tabtemp on tabtemp.字段名 where tabtemp.字段名 <> tabsource.字段名
      

  13.   

    谢谢大家关心。我正在调试!!!!
    starbattler(小石头):真在调试!!!
      

  14.   

    SELECT DISTINCT city
    FROM pubs..authors As A
    WHERE NOT EXISTS
        (SELECT *
        FROM pubs..publishers As B
        WHERE A.city = B.city)
      

  15.   

    to: lzy5042(老山) 
    select 字段名 into tabsend from tabsource where tabsource.字段名 <> tabtemp.字段名
    inner join tabtemp on tabtemp.字段名 where tabtemp.字段名 <> tabsource.字段名 这个语句说明tabsource.字段名 和tabtemp.字段名存在某种对应关系,你有吗?搞不好会多出记录的!
      

  16.   

    zhangcc99(zhangcc99):我正在调试!!谢谢你的关注!!!
      

  17.   

    zhu_joe(凤梨罐头):我试过了。你的做法有错误。提示找不到这个数据库。
    我想问一下。pubs..publishs as b 这句话的意思是不是打开pubs数据库中的publishs表
    ?? as b是什么意思?? publishs =b ??
    其实我要打开的是两个数据库的表。
      

  18.   

    是啊,你可以把pubs替换成任何你所用的数据库,比方说一个数据库是new,另一个是old,
    程序就可以这样了:SELECT DISTINCT city
    FROM old..authors As A
    WHERE NOT EXISTS
        (SELECT *
        FROM new..publishers As B
        WHERE A.city = B.city)A和B分别代表了old..authors 表和new..publishers 表
    我是过肯定行的!:)
      

  19.   

    zhu_joe(凤梨罐头):我忘了告诉你了。我用的是access数据库!!谢谢你的关心。我一定给分,谢谢!!我再试一试!!!!
      

  20.   


    CREATE TABLE T1
    (
    c1 int,
    c2 int,
    c3 int,
    c4 int,
    c5 int
    )CREATE TABLE T2
    (
    c1 int,
    c2 int,
    c3 int,
    c4 int,
    c5 int
    )INSERT INTO T1 values(5, 2, 3, 5, 6)
    INSERT INTO T2 values(5, 2, 3, 5, 6)
    INSERT INTO T1 values(3, 2, 3, 7, 6)
    INSERT INTO T2 values(6, 2, 3, 7, 6)
    SELECT * FROM T1 as T3 LEFT JOIN (
    SELECT T1.* FROM T1, T2 WHERE T1.c1 = T2.c1 and T1.c2 = T2.c2 and T1.c3 = T2.c3 and T1.c4 = T2.c4 and T1.c5 = T2.c5) AS Te
    ON T3.c1 = Te.c1 and T3.c2 = Te.c2 and T3.c3 = Te.c3 and T3.c4 = Te.c4 and T3.c5 = Te.c5
    WHERE Te.c1 is nullUNIONSELECT * FROM T2 as T3 LEFT JOIN (
    SELECT T1.* FROM T1, T2 WHERE T1.c1 = T2.c1 and T1.c2 = T2.c2 and T1.c3 = T2.c3 and T1.c4 = T2.c4 and T1.c5 = T2.c5) AS Te
    ON T3.c1 = Te.c1 and T3.c2 = Te.c2 and T3.c3 = Te.c3 and T3.c4 = Te.c4 and T3.c5 = Te.c5
    WHERE Te.c1 is null
      

  21.   


    insert inyo tabsend (select * from tabsource where afield not exist ( select distinct afield from tabtemp)
    union
    select * from tabtemp where afield not exist (select distinct afield from tabsource))如果再不行就只能使用store procedure的cursor机制进行处理了