使用from子选择更新表

时间:2019-02-06 00:05:24

标签: postgresql

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

我一直试图将update语句与from中的子选择一起使用。 如果我自己执行子查询,它将返回x行数,但是当我执行整个update语句时,它将更新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中的子选择查询中返回的行数相同的行。

1 个答案:

答案 0 :(得分:0)

在这种情况下,更新的行少于子查询返回的行,这可能是因为在子查询中多次返回了一个行ID。如果发生这种情况,update语句仍将仅更新该行一次。我假设您提供的语句与您正在运行的语句不完全相同,但是您应该检查子查询是否没有在子查询的id字段中提供重复项(使用DISTINCT或{{1} }或再次检查您的GROUP BY条件。