【问题标题】:Copy from 1 table to table 2, no duplicates从1表复制到表2,没有重复
【发布时间】:2016-06-23 09:23:41
【问题描述】:

表1:id、fileref、1、2、3、4、5、accno、7、8、9等……

表 2:id、fileref、accno

有人可以帮我创建一个 sql 查询来将表 1 id、fileref、accno 复制到表 2 而不重复,因为表 2 已经有很多信息,例如表 1 的精简版,但我现在导入了更多信息到表1,需要把id、fileref、accno移到表2,不重复,谢谢

【问题讨论】:

标签: sql sql-server sql-server-2016


【解决方案1】:
INSERT INTO table2
SELECT id, fileref, accno
FROM table1 T
WHERE NOT EXISTS(SELECT * 
                 FROM table2 TT
                 WHERE (T.id = TT.id
                       AND
                       T.fileref = TT.fileref
                       AND 
                       T.accno   =  TT.accno)
                 )

【讨论】:

  • 这个有效,根据时间是第一个:P 对不起,再次感谢大家
【解决方案2】:

让我们制作测试数据;

IF OBJECT_ID('tempdb..#Table1') IS NOT NULL DROP TABLE #Table1
GO
CREATE TABLE #Table1 (id int, fileref varchar(10), accno varchar(10))
INSERT INTO #Table1 (id, fileref, accno)
VALUES
(1,'File1','Acct1')
,(2,'File2','Acct2')
,(3,'File3','Acct3')
,(4,'File4','Acct4')
,(5,'File5','Acct5')

IF OBJECT_ID('tempdb..#Table2') IS NOT NULL DROP TABLE #Table2
GO
CREATE TABLE #Table2 (id int, fileref varchar(10), accno varchar(10))
INSERT INTO #Table2 (id, fileref, accno)
VALUES
(1,'File1','Acct1')
,(2,'File2','Acct2')

此查询将确保所有三个字段都不匹配。

INSERT INTO #Table2 (id, fileref, accno)
SELECT 
a.id
,a.fileref
,a.accno
FROM #Table1 a
LEFT JOIN #Table2 b
    ON a.id = b.id
    AND a.fileref = b.fileref
    AND a.accno = b.accno
WHERE b.id IS NULL

此查询的结果是将缺少的 3 行从 table1 插入到 table2 中。

【讨论】:

    【解决方案3】:
    INSERT INTO table2(id, fileref, accno)
    
    SELECT t1.id, t1.fileref, t1.accno
    
    FROM table1 t1 
    
    JOIN table2 t2 ON t1.id = t2.id AND t1.fileref = t2.fileref AND t1.accno = t2.accno
    
    WHERE t2.id IS NULL;
    

    应该这样做。

    编辑:

    切掉不同的部分,在 3 个值上连接表并检查表 2 的 ID 等于 NULL 的位置;

    抱歉给您带来的误会

    【讨论】:

    • 重复项呢?
    • @RichBenner 您选择中的 DISTINCT 只会占用每个实例中的 1 个。 w3schools.com/sql/sql_distinct.asp
    • @TanguyB 表 2 已经有很多信息,例如表 1 的精简版,因此您需要检查表 2 中是否没有完全相同的行
    • @TanguyB OP 已经明确表示 table2 中已经有数据,他不想再次插入相同的数据。
    • @RichBenner 我对红色不好。加入 3 个值的表,然后检查 ID 不存在的位置。
    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多