zoukankan      html  css  js  c++  java
  • 抱SQL SERVER大腿之从巨大表中提炼非重复数据

    SQL SERVER大腿之从巨大表中提炼非重复数据

    左直拳

     

    有一个表,2千多万条记录,其中有很大部分只有一两个字段的内容不同,可视为重复记录。现在要从这个表里提炼出不重复的部分,转移到另一个新表里。同时这个转移不是简单的复制,因为两表的结构不同,新表中的新字段需要赋值。

    凭我那两下子,是这么搞的:

    1、不能用一条SQL语句搞定(也许有,我写不出来)。要用循环;

    2、使用临时表;

    3、删除临时表中的重复记录,然后转移到新表

    过程如下:

    --创建一个与新表一模一样的临时表

    CREATE TABLE #TEMP ……

     

    --循环,将符合条件的记录(未过滤重复)插进临时表

    --这里对这个巨大表是分批处理的,每个循环最多处理10万条

    WHILE( @i < @j )

    BEGIN

        SET @k1 = @i * 100000

        SET @k2 = (@i + 1) * 100000

     

        INSERT INTO #TEMP(……)

        SELECT

        ……

        FROM a, b

        WHERE ……

        AND a.Id BETWEEN @k1 AND @k2

        GROUP BY ……

     

    --赋新值

        UPDATE #TEMP SET ……

        FROM #TEMP,a

        WHERE ……

        AND a.Id BETWEEN @k1 AND @k2

     

        SET @i = @i + 1

    END

     

    --删除重复行

    DELETE FROM #TEMP WHERE

    EXISTS(SELECT 1 FROM #TEMP a WHERE a.Id<#TEMP.Id AND a. KeyId=#TEMP.KeyId)

    --最后将数据从临时表复制到新表

    INSERT INTO ……

    SELECT ……

    FROM #TEMP

     

    两千多万条记录啊。

     

    两千多万条记录算条毛?要是两千多万元人民币多好。

     
  • 相关阅读:
    FXBlurView用法
    NSAttributedString用法
    SDWebImage的使用
    UITextField 对输入金额的约束
    Delphi获取计算机名
    delphi下实现控制其它窗体中的控件[转]
    根据版本的不同整理所有的绿色SQL Server[转]
    点击TWebBrowser中的超级链接不在新的IE窗口打开
    Delphi 快速获取本机的IP地址[转]
    Delphi下如何使程序在Win7/Vista上用管理员权限运行[转]
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258298.html
Copyright © 2011-2022 走看看