两个表的表结构设计是一样的,一个字段作为主键,通过什么方式可以查找出两个表中存在的不同的记录(就是这个主键的值在一个表存在,另外一个表不存在,是双向的),并把两个表不同的记录展示出来?
这两个表的数据量是挺大的,一天有百万级以上。有没有比较好的实现方式?
举例如下
table1                table2
id(主键)              id(主键)
name                  name找出两个表中存在的不同的记录,就是这个主键的值在一个表存在,另外一个表不存在。
希望各位帮我想想,谢谢

解决方案 »

  1.   

    select A.* from A left join B on A.id=B.id where B.id is null
    union
    select B.* from B left join A on A.id=B.id where A.id is null
      

  2.   

    select distinct * from
    (select  a.* from a
    union all
    select b.* from b) c 
      

  3.   


    select 主键名
    from (
        select * from a
        union all
        select * from b
    ) t
    group by 主键名
    having count(*) = 1
      

  4.   


    --存在table1而不存在table2
    select id from table1
    except
    select id from table2--存在table2而不存在table1
    select id from table2
    except
    select id from table1
      

  5.   

    select * from a where checksum(*) not in(select checksum(*) from b)
      

  6.   

    count(主键名) = 1表示在一个表存在在另一个表不存在,如果是2的话说明两张表都存在。