代码之家  ›  专栏  ›  技术社区  ›  OcMaRUS

PostgreSQL:意外更新数据库中的所有记录

  •  0
  • OcMaRUS  · 技术社区  · 1 年前

    我有一个生产台和一个临时工。 任务:使用来自temp的信息更新prod表中的所有记录。

    update prod set status = 'on'
      from prod pd
      join temp tm using (factory_id) 
    where pd.status = 'off'
    

    不幸的是,这段代码去了prod表中设置为“on”的所有记录,无论它们是否在temp中。

    你能解释一下是怎么发生的吗?我认为只有状态为“关闭”的记录才能生效。 在请求中应该更正哪些内容以使其正确?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Frank Heikens    1 年前

    发生这种情况是因为 from ,你应该提到 prod 仅一次:

    update prod set status = 'on'
      from temp tm 
    where prod.status = 'off'
    and prod.factory_id = tm.factory_id;