首页 > 解决方案 > PostgreSQL,如何解决用作表达式的子查询返回的多行错误

问题描述

我正在尝试输出由一个值和一个名称列表组成的行。这是我的查询:

Update person set institution_v2 = (select dv.entity_id 
from dictionary_v2 dv
left join dictionary_entry_v2 dev on dev.dictionary_id = dv.id
left join person p on p.name = dev.entry_value 
JOIN journal_person_relation jpr on jpr.person_id = p.person_id 
JOIN journal j on jpr.journal_id = j.journal_id) 

但它失败了: SQL 错误 [21000]: 错误:用作表达式的子查询返回的不止一行

我怎么解决这个问题?

标签: sqlpostgresqlsql-updatecorrelated-subquery

解决方案


据推测,您打算使用相关子查询。所以,不要person在 subuqery 中重复使用:

update person p
    set institution_v2 = (select dv.entity_id 
                          from dictionary_v2 dv join
                               dictionary_entry_v2 dev 
                               on dev.dictionary_id = dv.id
                          where p.name = dev.entry_value 
                         );

注意:这仍然可能返回重复项。单个值可能不适合该列 - 也许您想要一个数组 - 或者如果任意匹配值有效,请使用limit 1. 我不认为日记帐表在逻辑中添加了任何内容。


推荐阅读