【发布时间】:2016-03-09 15:18:59
【问题描述】:
我正在尝试更新具有 place_id (fk) 的每一行,但 db 说 select 的结果不止一行。当然它确实有不止一行,因为我正在尝试更新列,而不仅仅是一条记录。
update Event set placeListingName =
(select substr(coalesce(epc.shortTitle, epc.title),1,100)
from Event e join e.place p join p.publicContent epc
where e.place is not null)
where place is not null
括号中的表达式(选择 ... 其中 e.place 不为空)运行良好并返回字符串列表
【问题讨论】:
-
你听说过
on子句吗? -
这是 JPQL 吗? (因为它看起来像)
-
我认为内部
WHERE子句中的简单Event = e就足够了。我不确定UPDATE在每个 JPA 实现中是否支持子查询。 (休眠可能会工作) -
您收到错误的原因不是因为您尝试更新多行。您收到错误是因为您的子查询应该只返回一行,但它返回多行。 SET 子句中的子查询只能返回一行。
-
@kret 你总是会在子查询中得到多个结果,除非你给子查询的
WHERE子句提供条件,它可以将子查询中的单行匹配到一个目标表中的单行。WHERE Event = e应该这样做(如果您在Event实体中有主键)。
标签: sql postgresql jpql