【问题标题】:PostgreSQL Update does not updated properlyPostgreSQL 更新未正确更新
【发布时间】:2021-10-26 03:52:42
【问题描述】:

我正在尝试将记录更新为按 ID 匹配的不同表中的 Number 列中的值,但它会将 Number 列中的所有行更新为第一个匹配的值另一个表中的匹配 ID。

  UPDATE public.table
            SET number = s.number,
                updatedt =  now()                
            -- select a.* , s.number
            FROM public.Department AS a
            INNER JOIN public.Department_stg AS s
                ON a.id = s.id 
                 AND a.number <> s.number;
                --AND COALESCE (a.number, 1) = COALESCE (s.number, 1) ; 
                --AND COALESCE (CAST (a.number AS VARCHAR(20) ),'') <> COALESCE (CAST (s.numberAS VARCHAR(20) ),'') ; 
                

【问题讨论】:

    标签: sql postgresql sql-update


    【解决方案1】:

    您忘记了使用FROM 子句中的内部连接来连接"table"WHERE 条件;也许

    WHERE "table".id = a.id
    

    如果没有这样的条件,"table".number 将被更新为来自内部连接的任何行。

    【讨论】:

      【解决方案2】:

      与 postgreSQL 中的 T-SQL 不同,JOIN 不需要更新。我们可以只在 From 子句中传递源值表,并在 UPDATE 子句中保持要更新的表。

      UPDATE public.table AS a
      SET number= s.number,
          updatedt =  now() 
      FROM public.Department_stg AS s
      WHERE a.id = s.id
      AND COALESCE (a.number, 1) <> COALESCE (s.number, 1) ;
      

      【讨论】:

        猜你喜欢
        • 2021-11-03
        • 2018-01-20
        • 2020-04-09
        • 2013-04-02
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多