我正在寻找对数据库进行一些修复的方法,该方法需要向表中添加一些新字段并根据特定条件回填它们。有很多记录,我希望回填可以相对快速地运行,因为我当前的查询要花很长时间才能运行。
我尝试通过子查询进行更新,但这似乎不太有效。
下面的查询经过编辑以显示一般过程(因此语法可能会有所偏离)。希望你能理解我在做什么。/
我想更新帐户表中的每条记录。
我想通过遍历每条记录并在更新之前针对该记录的ID运行许多检查来做到这一点。对于联接中不匹配的任何记录,我只想将它们设置为0。
在数十万条记录中执行此操作似乎是永远的。我敢肯定,有一种更快,更有效的方法可以做到这一点。使用Postgres。
UPDATE
accounts
SET
account_age = a2.account_age,
FROM
(
with dataPoints as (
select
COALESCE(account__c.account_id as account_id,
account__c.account_age, 0) as account_age
from account__c
OUTER LEFT join points on points.account_id = account__c.id
OUTER LEFT join goal__c on goal__c.id = scores.goal_id
group by account_id, account__c.account_age
)
select
account_id,
max(dataPoints.account_age) as account_age,
from scores
join account on accounts.id = scores.account_id
group by account_id
) as a2
WHERE accounts.id = a2.account_id;