现有两表t1,t2(表结构一样),t1为临时表,t2为最终表。
需要比较两个表t1,t2的数据,如果t2已有数据和t1相同,则不插入到t2,否则把t1中的数据插入到表t2。
怎么写?多多赐教!

解决方案 »

  1.   


    insert t2
    select * from t1 b
    where not exists(select 1 from t2 a where a.col1=b.col1 
    and a.col2=b.col2.......)
      

  2.   

    临时表t1一次可能有上千万条,这样做性能会怎样? 另外,sqlserver里面的Merge能实现不,有何差异呢。 
      

  3.   

    insert into t2
    select * from t1 left join t2 on t1.关联字段=t2.关联字段
    where  t2.关联字段 is null 
      

  4.   

    2008的话 用新的操作符Merge
    如果是2005或者以前
    就用exists方法
      

  5.   

    如果是MSSQL2008及以上版本,可以使用Merge语句:
    merge into t2 a
    using t1 b
    on a.col1=b.col1
    when not matched then --当目标表中没有来源表的记录的时候,就添加
    insert (col1,col2,col3,col4,...)
    values (b.col1,b.col2,b.col3,b.col4,...)Merge语句优缺点:
    优点:不需要访问数据多次,而且作为原子操作进行处理的,不用显示声明事务。
    缺点:按照完整方式记录日志。
      

  6.   

    其实这个可以解决了:http://blog.csdn.net/farawayplace613/article/details/6197505
    谢谢各位!