【问题标题】:Postgresql update a table with joinPostgresql 使用连接更新表
【发布时间】:2016-11-14 20:49:56
【问题描述】:

我需要使用其他表中的信息更新表。 这是我的 sql 查询:

UPDATE service a 
JOIN agency b USING (feed_id) 
SET end_date = (SELECT MIN(start_date)-1 
                FROM service c 
                JOIN agency d USING (feed_id) 
                WHERE b.feed_id = a.feed_+1 
                      AND b.agency_id = d.agency_id)

我在条件中需要机构 ID,所以唯一的方法是将两个表与机构表连接起来。

Postgres 返回:

ERROR:  syntax error at or near "JOIN"
LINE 1: UPDATE service a JOIN agency b USING (feed_id) SET end_date ...

有什么建议吗?

【问题讨论】:

  • 不起作用”不是有效的 Postgres 错误消息。 in the manual 你在哪里找到那个语法?
  • edit您的问题为有问题的表添加create table语句,一些示例数据和基于该数据的预期结果。 Formatted 文本no screen shots

标签: sql postgresql join


【解决方案1】:

试试这个:)

UPDATE service
SET end_date = (SELECT MIN(start_date)-1 
                FROM service c 
                JOIN agency d USING (feed_id) 
                WHERE b.feed_id = a.feed_+1 
                      AND b.agency_id = d.agency_id)
FROM service a
JOIN agency b USING (feed_id) 

【讨论】:

  • 不要不要UPDATE语句的FROM子句中重复目标表。
  • 如果我不接受syntax error at or near "JOIN"
  • 不起作用。最好在子查询中添加第二个连接
【解决方案2】:

此查询有效:

UPDATE service a
SET end_date = (SELECT MIN(start_date)-1
            FROM service b
            JOIN agency c ON b.feed_id = c.feed_id
            JOIN agency d ON a.feed_id = d.feed_id 
            WHERE b.feed_id = a.feed_id+1 
            AND c.agency_id = d.agency_id
            )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2016-12-11
    • 2012-06-11
    • 2018-10-01
    相关资源
    最近更新 更多