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
Postgresql:如何将临时表中的唯一行追加到现有表中?_Sql_Postgresql - Fatal编程技术网

Postgresql:如何将临时表中的唯一行追加到现有表中?

Postgresql:如何将临时表中的唯一行追加到现有表中?,sql,postgresql,Sql,Postgresql,基本上,我是在删除所有行并最终从临时表t1插入唯一行之前,从表t2复制唯一行 //copy unique rows to temp table t1 CREATE TEMPORARY TABLE t1 (select distinct on (name) * from t2); //delete rows from t2 DELETE FROM t2; //paste the unique rows from temp table insert into t2(name, age, grad

基本上,我是在删除所有行并最终从临时表t1插入唯一行之前,从表t2复制唯一行

//copy unique rows to temp table t1
CREATE TEMPORARY TABLE t1 (select distinct on (name) * from t2);

//delete rows from t2
DELETE FROM t2;

//paste the unique rows from temp table
insert into t2(name, age, grade)
select name, age, grade
from t1;

然而,我不确定我是否会以有效的方式进行这项工作?是否还有另一个SQL查询可以剥离一个表,以便只保留唯一的行?或者显示我的sql有意义吗?

您的方法可能是最好的方法-修改表中大量行的查询通常比清空表并重新插入行慢

你一定要小心。使用名称索引,您的代码将更加高效。此外,标识/序列列和其他自动分配的列可能需要特别注意

如果我们假设该表具有唯一id,则可以执行以下操作:

delete from t1
    where t1.id > (select max(tt1.id)
                   from t1 tt1
                   where tt1.name = t1.name
                  );