【问题标题】:I am trying to run a postgresql query in which I need to join three tables as part of update query but it is giving me error on join我正在尝试运行一个 postgresql 查询,我需要在其中加入三个表作为更新查询的一部分,但它在加入时给了我错误
【发布时间】:2022-01-07 05:48:08
【问题描述】:

我正在尝试运行一个 postgresql 查询,我需要在其中加入三个表作为更新查询的一部分,但它在加入时给了我错误。

UPDATE table1 
join table2 on (table1.id=table2.id1)
join table3 on (table2.id2=table3.id)
SET table1.name='Test',
table3.equipment_code='ABC'
WHERE table1.id='21003';

你能指导我吗?

【问题讨论】:

  • 正确的语法记录在in the manual
  • 但它在加入时给了我错误。好吧,如果你告诉我们什么错误,你不认为会有帮助
  • 您能否根据上述情况提供一个查询?
  • 更新多个表时可能会遇到很多问题。也许这里提到的资源会对你有所帮助:stackoverflow.com/questions/32386246/…
  • PostGreSQL 不像 Microsoft SQL 那样支持 UPDATE 中的 JOIN。

标签: postgresql join sql-update


【解决方案1】:

未测试,但类似:

UPDATE table1 
   SET table1.name='Test'
FROM
   table1 join table2 on table1.id=table2.id1
   table2 join table3 on table2.id2=table3.id
WHERE
   table3.equipment_code='ABC'
AND 
   table1.id='21003';

虽然我不确定你为什么不这样做:

UPDATE table1 
   SET table1.name='Test'
WHERE
   table1.id='21003';

我没有看到 table2table3UPDATE 有任何贡献。

【讨论】:

    【解决方案2】:

    每个更新查询只能更新一个表。 所以你需要的是两个单独的查询,如下所示:

    1- 使用 table1 更新 table3

    UPDATE table3 SET equipment_code = t.whatever
    FROM (SELECT * FROM table1 JOIN table2 ON table1.id = table2.id1) AS t 
    WHERE t.id2 = table3.id AND table1.id = '21003';
    

    2- 然后更新你的 table1

    UPDATE table1 SET name = 'Test' WHERE id = '21003';
    

    顺便说一句,如果您想了解更多关于 update-join 语法的信息,请访问此处:https://www.postgresqltutorial.com/postgresql-update-join/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多