使用嵌套的子选择更新Postgres中的记录

时间:2009-11-03 17:03:33

标签: postgresql subquery

我有一个表添加了一个新列,我想编写一个SQL语句来根据现有信息更新该列。以下是两个表和相关列

'leagues'
=> id
=> league_key
=> league_id (this is the new column)
'permissions'
=> id
=> league_key

现在,用简单的英语,我想做的就是这个

Set leagues.league_id to be permissions.id for each value of permissions.league_key

我曾经尝试过这样的SQL:

更新联赛 SET league_id = (SELECT id FROM permissions WHERE league_key = (SELECT distinct(league_key)FROM leagues)) 其中league_key =(SELECT distinct(league_key)FROM leagues)

但是我收到一条错误消息

错误:用作表达式

的子查询返回多行

非常感谢任何帮助

2 个答案:

答案 0 :(得分:11)

根据您的要求

为每个权限值设置leagues.league_id为permissions.id.league_key

就是这样。

UPDATE leagues
SET league_id = permissions_id
FROM permissions
WHERE permissions.league_key = leagues.league_key;

答案 1 :(得分:1)

当您将子查询作为表达式执行时,它不能返回结果集。您的子查询必须评估为单个结果。您看到的错误是因为您的一个子查询返回了多个值。

Here is the relevant documentation for pg84: