我的数据库包含一个设计为:
的表| A | B | date | C | D | E |
给定一个具有相同设计的临时表,我希望将其内容插入到我的数据库中的永久表中。但是,我只想在temp中插入与最新行不同的行 temp.A = perm.A和temp.B = perm.B.行的新近度由日期列确定。
例如,给定一个看起来像的perm表:
| "Joe" | "Consultant" | 8/21/2014 | 40 | 72 | 54 |
| "Joe" | "Consultant" | 8/16/2014 | 25 | 72 | 30 |
然后是临时表行,如下所示:
| "Joe" | "Consultant" | 8/25/2014 | 40 | 72 | 54 |
不应插入,但
| "Joe" | "Consultant" | 8/25/2014 | 25 | 72 | 30 |
应。
当然,也应该插入具有先前不存在的A或B列条目的任何行。
我已经搞过几种方法来做这件事(包括迭代),但我不确定这是正确的方法是什么?我是SQL开发新手,所以任何建议都会有所帮助。
谢谢!
答案 0 :(得分:0)
如果您的DBMS允许这样INSERT ... SELECT ...在SELECT部分中引用要插入的表,您可以使用以下内容:
INSERT INTO PERM
select * FROM TEMP T
where NOT EXISTS
(select *
from PERM P
WHERE P.A=T.A and P.B=T.B and P.C=T.C and P.D=T.D and P.E=T.E
)
如果您的DBMS不允许引用,您可以插入" TEMP2",然后从那里插入所有内容到PERM
答案 1 :(得分:0)
试试这个:
insert into perm (a,b,c,d,e,f)
select
t.*
from
temp t left outer join
(
select
p.*
from
perm p inner join
(
select a, b, max(c) as max_c
from perm
group by a,b) mx on
p.a = mx.a and
p.b = mx.b and
p.c = max_c
) p on
t.a = p.a and
t.b = p.b and
t.c > p.c and
t.d = p.d and
t.e = p.e and
t.f = p.f
where
p.a is null