【问题标题】:Insert into src_ table from dest_table without duplicate从 dest_table 插入 src_ 表而不重复
【发布时间】:2011-08-09 11:05:15
【问题描述】:

我有两个表,src_table 和 dest_table src_table 包含多行,包括重复项 我想将行从 src_table 复制到 dest_table 而不重复。

请帮帮我

【问题讨论】:

  • @all 过滤条件是什么,是否存在重复?应该选哪一个?

标签: mysql sql vb.net ms-access


【解决方案1】:
INSERT INTO dest_table (column1,column2,column3,...)
SELECT DISTINCT column1,column2,column3,...
FROM src_table

只需使用 INSERT INTO ... SELECT DISTINCT。这只会选择不同的值。如果要复制所有列,只需从 INSERT 行中删除列并在 SELECT 中添加星号 (*)。当心主键,distinct 仅在所选行是 100% 重复时才有效。

【讨论】:

    【解决方案2】:

    不重复是否也意味着不重复目标表中的值?

    如果是,您可以随时在其上执行LEFT JOIN 查询,以查询SELECTIS NULL

    INSERT INTO dest_table ( column1, column2, column3, ... )
        SELECT DISTINCT column1, column2, column3, ...
        FROM src_table a
        LEFT JOIN dest_table b ON a.column1 = b.column1 AND a.column2 = b.column2
                  a.column3 = b.column3 ...
        WHERE b.column1 IS NULL
    

    基本上它会寻找匹配失败的地方,并且只插入那些记录。

    【讨论】:

      【解决方案3】:

      例如使用这个查询:

      create table #T1 (field1 int, field2 int)
      
      insert #T1 values (1,2)
      insert #T1 values (1,3)
      insert #T1 values (2,1)
      
      create table #T2 (field1 int, field2 int)
      
      insert #T2 values (1,3) /*exists in first table*/
      insert #T2 values (1,4) 
      insert #T2 values (1,4) /*dublicated*/
      insert #T2 values (2,2)
      
      insert #T1
      select distinct field1, field2 from #T2
      where not exists (select 1 from #T1 where #T1.field1 = #T2.field1 and #T1.field2 = #T2.field2)
      
      select * from #T1
      

      另外在 t-sql 中存在非常有用的 MERGE 语句...

      最好的问候, 最大

      【讨论】:

        猜你喜欢
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多