PSQL更新语法 - 使用对表的循环引用

时间:2015-08-29 16:47:06

标签: sql postgresql

这是我尝试编写的PSQL命令:

UPDATE accounts
  SET account_type_id=subquery.id
  FROM (SELECT id
          FROM account_types
          WHERE mongo_id = accounts.mongo_account_type_id) AS subquery
  WHERE accounts.id = 1;

收到此错误消息:

  

错误:对表"帐户"的FROM子句条目的无效引用   第1行:... OM(SELECT id FROM account_types WHERE mongo_id =   accounts.m ...                                                                ^提示:表" accounts"有一个条目,但不能引用它   从这部分查询。

数据结构的简短说明 - 从MongoDB迁移到PSQL,我已将所有记录移到PSQL中,维护旧的Mongo BSON以引用和重新拼接具有外键关系的记录 - 我的帐户表具有如下列:

mongo_id                       | 521289ae1e0345000200000f
mongo_merchant_id              | 55e13f0afbab68982e000006
mongo_account_type_id          | 521289c41e03450002000011
mongo_admin_id                 | 518b762e89651a0389000013

我的account_types表格包含:

mongo_id          | 521289c41e03450002000011
mongo_merchant_id | 55e13f0afbab68982e000006

所以我尝试使用accounts.mongo_account_type_id == account_types.mongo_id作为参考,将ACCOUNTS表的account_type_id字段设置为ACCOUNT_TYPES表中id字段的INTEGER值。

最终,帐户应该有account_type_id = 1(在这种情况下 - 此特殊情况下记录为account_type的id为1)

在我的查询中,我对如何使用帐户表作为变量'进行子查询感到困惑。对于mongo_account_type_id。

1 个答案:

答案 0 :(得分:2)

据我了解您的意图,查询应如下所示:

UPDATE accounts a
SET account_type_id = t.id 
FROM account_types t
WHERE t.mongo_id = a.mongo_account_type_id
AND a.id = 1;