【问题标题】:PostgreSQL complex update operation on columnPostgreSQL 对列的复杂更新操作
【发布时间】: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


【解决方案1】:

如果有人感兴趣:

update Event e set e.placeListingName = 
    (select substr(coalesce(epc.shortTitle, epc.title),1,100) 
    from Event ev join ev.place p join p.publicContent epc 
    where ev.id = e.id) 
where e.place is not null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多