【问题标题】:Update table with from sub select使用子选择更新表
【发布时间】:2019-02-06 00:05:24
【问题描述】:

我有两张桌子 a 和 b。 我想更新表 a 中的行,该行是表 b 中最早插入的每个 id 的最新插入,其中 a.id = b.id

我一直在尝试在 from 中使用带有子选择的更新语句。 如果我自己执行子查询,它会返回 x 行数,但是当我执行整个更新语句时,它会更新 y 行数。

update a
set  title = b.title
    created_at = b.created_at
from
(
    select 
    e.id,e.title,e.created_at
    from
    (
        select
        l.id,
        l.title,
        l.created_at
        l.t_insert
        from b l
        left join b r
        l.id = r.id and l.t_insert > r.t_insert
    ) e
    join
    (
        select
        l.id,
        l.title,
        l.created_at,
        l.t_insert
       from a l
       left join a r on l.report_id = r.report_id and l.t_insert < 
       r.t_insert
    ) f
)
where
a.id=b.id

我希望更新的行数与 from 中的子选择查询中返回的行数相同。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    在这种情况下,更新的行数少于子查询返回的行数可能是因为在子查询中多次返回了一个行 ID。如果发生这种情况,更新语句仍将只更新该行一次。我假设您提供的语句不完全是您正在运行的语句,但您应该检查子查询是否在子查询的 id 字段中提供重复项(使用 DISTINCTGROUP BY 或通过 double检查您的JOIN 条件。

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多