Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 避免在“重复”非常重要的地方插入重复行_Sql - Fatal编程技术网

Sql 避免在“重复”非常重要的地方插入重复行

Sql 避免在“重复”非常重要的地方插入重复行,sql,Sql,My db包含一个设计如下的表: | A | B | date | C | D | E | 给定一个具有相同设计的临时表,我希望将其内容插入数据库中的永久表中。但是,我只想在temp中插入与最近一行不同的行,其中 温度A=永久A,温度B=永久B。行的最近性由日期列确定 例如,给定一个如下所示的perm表: | "Joe" | "Consultant" | 8/21/2014 | 40 | 72 | 54 | | "Joe" | "Consultant" | 8/16/2014 | 25 |

My db包含一个设计如下的表:

| A | B | date | C | D | E |
给定一个具有相同设计的临时表,我希望将其内容插入数据库中的永久表中。但是,我只想在temp中插入与最近一行不同的行,其中 温度A=永久A,温度B=永久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/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开发新手,所以任何建议都会很有帮助


谢谢

如果您的DBMS允许此插入。。。选择如果要插入的表格在“选择零件”中被引用,则可以使用如下内容:

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中

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

定义SQL。。。MySQL、SQL Server、Oracle等?在存储数据的程序中执行逻辑可能更合适、更简单。或者,您可以创建一个“最近的记录”表:如果表中已有新记录,则放弃新记录,否则将旧行从“最近的记录”表移动到永久目标表并插入新行。它就像一张临时桌子。但这是一个混乱的工作。对不起,我不明白为什么在示例中,您要插入的两行具有相同的日期,这是一个错误吗?谢谢Beth!最后我做的有点不同,但这让我有了90%的成功。