sql - 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]: 错误:用作表达式的子查询返回的不止一行
我怎么解决这个问题?
解决方案
据推测,您打算使用相关子查询。所以,不要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
. 我不认为日记帐表在逻辑中添加了任何内容。
推荐阅读
- python - 一个操作需要多昂贵才能值得写入文件?
- sql - 如何在 SQLite 中更改日期格式
- openapi - OpenAPI - 如何描述查询参数?
- jestjs - 在 Jest 中,我的 BeforeAll 在我的 test.concurrent.each 中途被调用
- python - Discord.py 如何删除每个文本通道?
- c# - Response.Redirect(url) 在 firefox 开发者控制台中显示 301 和 302
- python-3.x - 如何优化取决于迭代中每一步的几个条件的循环?
- c# - Unity2D 切换角色
- html - 如何使这个 SVG 尺寸更小?
- git - 如何在创建之前找到合并请求中的冲突