现有超百万条的记录 有超200的Columns 
两个表 结构完全一样. 有主键ID 并且建立的索引 
但是里面的数据有不同的地方..
目标:
找出两个表中主键相同 但是其他任何一点不同的记录 .
最终要得出的是只要不同的哪一些数据..
比如 

ID  NAME   PSW  dept
1   name1  psw1  dept1
2  name 2  psw2  dept2
.
.

ID  NAME   PSW  dept
1   name1  psw1  dept1
2  name 2  psw2  deptN
3  name 3  psw3  dept3
现在就是要找出这样的结果
2 dept2 deptN 

解决方案 »

  1.   

    SELECT B.* FROM B LEFT JOIN A ON A.ID=B.ID AND A.PSW=B.PSW AND A.DEPT=B.DEPT AND A.NAME =B.NAME 
    WHERE B.ID IS NULL
      

  2.   

    上面错了
    SELECT B.* FROM B LEFT JOIN A ON A.ID=B.ID AND A.PSW=B.PSW AND A.DEPT=B.DEPT AND A.NAME =B.NAME  
    WHERE A.ID IS NULL
      

  3.   

    我那有接近300 Columns   
    那我就还的这样不停的写下去????效率怎样呢
      

  4.   

    没办法,你有那么多字段,可以将字段COPY到EXCEL中,生成好(
    A.ID=B.ID AND A.PSW=B.PSW AND A.DEPT=B.DEPT AND A.NAME =B.NAME)后再COPY回来
      

  5.   

    [Err] Out of memory  貌似这样是行不通的....这个可以怎么改??
      

  6.   

    Out of memory是因为mysql进程内存达到进程可用内存的上限了(32位系统的进程可用地址空间上限大约在2.5GB-2.7GB)。
    SELECT column1,column2,...,column300 FROM 
      

  7.   

    试试这个~
    先合并两个表,并添加一个flag字段来区分哪些行属于B表;
    选出拥有相同id的行(因为id是主键,覆盖索引会使这个子查询很快完成),剔除掉两个表中id字段不匹配的行;
    对经过以上两步处理得到的结果集使用GROUP BY,A表和B表中完全相同的行会合并为一行并使COUNT(*)为2,没有合并的行的COUNT(*)值为1;在这些没有发生合并的行中(COUNT(*)值为1),MAX(flag)的值为1的行属于A表,MAX(flag)的值为2的行属于B表:
    SELECT id,column2,...,column300,MAX(derivedtbl.flag) AS maxFlag FROM  
        (SELECT * ,1 AS flag FROM A
         UNION ALL
         SELECT * ,2 AS flag FROM B) AS derivedtbl
    WHERE derivedtbl.id in 
    (SELECT A.id FROM A INNER JOIN B ON A.id=B.id)
    GROUP BY id,column2,...,column300
    HAVING COUNT(*)=1 AND maxFlag=2
      

  8.   

    哦,补充一下:
    在语句的最后面加上ORDER BY null,可以避免GROUP BY的默认排序行为,能加快查询执行的速度~
      

  9.   

    没有好办法,自己要想办法生成这个SQL语句。
      

  10.   

    呵呵,可能我不该用“合并”这个词,我指的是UNION ALL~
    那些文字全是描述那条SQL语句的~
      

  11.   

    我现在采用的是WWWWA的方式 
    我取了4个字段来对比 结果如下 电脑2.7的CPU  2G 内存Affected rows: 0
    Time: 104.375ms
    8个字段的时候 
    Affected rows: 0
    Time: 104.485ms
    100个字段的时候
    Affected rows: 0
    Time: 125.141ms
    200个字段的时候
    Affected rows: 0
    Time: 144.578ms
    300个字段的时候
    Affected rows: 0
    Time: 168.984ms
    这个时候好像出来的数据不对了..汗~~~
      

  12.   

    加我QQ,在帖子上说太慢~QQ号用短消息发给你了:)