postgresql,使用来自另一个表的数据批量更新 我有一个目标表(已经填充了数据),另一个(源表)我需要将数据检索到第一个。 target_table postgres =#从ttasks选择ID,ID_USER; id |

问题描述 投票:0回答:1

Source_table

postgres=# select id from tusers where active; id ------ 1011 1012 1013 1014 (4 rows)

我需要使用来自Tusers表的ID更新ttasks表的ID_USER列,因此TTASKS上的最终结果应为:
# expected result after update [select id, id_user from ttasks;]
 id | id_user
----+---------
  1 |    1011
  2 |    1012
  3 |    1013
  4 |    1014
  5 |    1011
(5 rows)

我尝试的是什么(类似于...来自...语句的插入):
postgres=# update ttasks t1 set id_user = q1.id from (select id from tusers where active) q1 returning t1.id,t1.id_user;
 id | id_user
----+---------
  1 |    1011  
  2 |    1011
  3 |    1011
  4 |    1011  
  5 |    1011  
(5 rows)

但此查询始终使用我的Q1子查询中的第一个ID。
任何想法,帮助甚至解决我该如何完成此任务的解决方案?
非常感谢!

P.S。这是我在这个社区上的第一篇文章,因此,如果我的问题中的某些内容不符合您的规则,请对我保持温和。

最终,在我的一个朋友告诉我,并非所有内容都可以以“保持愚蠢的方式”的方式编码时,我写了一个PLPQSQL(PL/PGSQL)功能,该功能为我完成了这项工作,不仅仅允许使用一些功能内部高级过滤器

CREATE或替换函数sigts_workers_to_tasks(i_workers_table regclass,i_workers_table_tc text,i_tasks_table regclass,i_tasks_tasks_table_tc text,i_workers_filter text,i_workers_filter text default':: text,i_tasks_filter text defext text text,i_tasks_filter text Defalealett default text) 返回无效 $ body $ 声明工人int [];我整数; total_workers Integer; R记录; get_tasks文本; 开始 i_workers_filter:='where'|| nullif(i_workers_filter,''); i_tasks_filter:='where'|| nullif(i_tasks_filter,''); execute format('从%s seless s select array_agg(%s)(%s从%s serde s)s)q',i_workers_table_tc,i_workers_table_tc,i_workers_table,i_workers_table,i_workers_filter,i_workers_filter,i_workers_table_tc) 进入工人; - 可用[过滤]工人 total_workers:= cocece(array_length(工人,1),0); - 可用的[过滤]工人 如果total_worker = 0,则 执行格式('UPDATE%s SET%s = null%s',i_tasks_table,i_tasks_table_tc,i_tasks_filter); 返回; 如果结束; I:= 1; get_tasks:=格式('select *从%s%s',i_tasks_table,i_tasks_filter); - [过滤]任务 对于ececute(get_tasks)循环 执行格式('UPDATE%s SET%s =%s其中ID =%s',i_tasks_table,i_tasks_table_tc,workerers [i],r.id); i:= i+1; 如果我> total_worker,则i:= 1;如果结束; 结束循环; 返回; 结尾; $ body $ 语言PLPGSQL挥发性 费用100; ALTER函数分配_workers_to_tasks(regclass,文本,regclass,文本,文本,文本) 邮政局的所有者;

实现我自己的问题:

SELECTANDISS_WORKERS_TO_TASKS('Tusers','ID','ttasks','id_user','active');

postgresql
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.