2017-03-17 62 views
0

我很困惑如何将声明表中的值插入到选定的表中。我使用除了防止插入第一个副本,但我想要插入重复的第二行。从临时表中插入重复的行

Storage of the table 如何将第二个值放在上面的表中? Temporary table 我在这里实现的目的是在主表中插入第二个值来处理time_mode值。

这是我的查询

INSERT INTO temp_time(SwipeID,tdate,ttime,time_mode,raw_data,[Shift],eid,machineip) 
    SELECT a.SwipeID,a.tdate,a.ttime,a.time_mode,a.raw_data,1, eid FROM @temp_time 
    EXCEPT 
    SELECT SwipeID,tdate,ttime,time_mode,raw_data,Shift,eid,machineip from temp_time 

从上面的查询,只有一个值插入。我的客户改变了他们的想法,他们希望重复的价值观得以体现。更改time_mode上的值可以通过我制作的系统进行更改。如果我再次使用插入而不使用except值的查询,则主表会有3行导致问题,因为我想反映的仅仅是2行。

+0

你为什么要插入一个重复的值?通常这就是你想要摆脱的那种东西。 – ZLK

+0

如果你想创建重复的行,你的表如何假设它的'主键'工作? – Arash

+0

因为他们想要第二个值并且可以改变它的time_mode – Clarice

回答

1

我想我终于正确地理解了你的问题。假设您已经运行了第一个查询,该查询在第二个表中插入了没有重复数据的数据,现在您想要插入剩余的原始重复项。

在这种情况下,这里是你可以怎么做,以消除你已经插入前面行:

WITH dupes AS (
    SELECT *, ROW_NUMBER() OVER(
      PARTITION BY SwipeID, tdate, ttime, time_mode, raw_data,[Shift], eid, machineip 
      ORDER BY (SELECT(0)) 
     ) AS row_num 
    FROM SourceTable 
) 
INSERT INTO DestinationTable (/*columns*/) 
SELECT /*values you need*/ 
FROM dupes 
WHERE row_num > 1; 
+0

谢谢!我只是担心,如果他们再次运行查询,行计数2和以上将被复制到源表中。 – Clarice

+1

@Clarice那么你可以加入'SELECT COUNT(*)AS FROM DestinationTable GROUP BY [相关字段]'并且执行'WHERE row_num> total'。 – plalx

0

假设您使用的是MYSQL;

INSERT INTO your_first_table(SwipeID,tdate,ttime,time_mode,raw_data,shift,eid,machineip) 
    SELECT a.SwipeID,a.tdate,a.ttime,a.time_mode,a.raw_data,1,a.eid,a.machineip FROM your_second_table a ORDER BY a.SwipeID DESC LIMIT 1, 1