【问题标题】:How can I rewrite postgres code to SQL Server?如何将 postgres 代码重写为 SQL Server?
【发布时间】:2019-08-15 14:36:58
【问题描述】:

我在 plpgsql 上有一段这样的代码:

UPDATE table1
SET column1 = value1
FROM table1 tbl
INNER JOIN table2 tbl2 ON tbl2.id = tbl.id
WHERE table2.code = 200
  AND table1.id = tbl.id;

由于 postgress 规范,这里 table1 和 alias tbl 是两个不同的表。 现在我想为 SQL Server 编写相同的过程,但是这段代码失败并出现错误

[S0001][4104] 无法绑定多部分标识符“table1.id”。

我应该如何为 SQL Server 重写这段代码?

【问题讨论】:

    标签: sql-server join sql-update


    【解决方案1】:

    这在 SQL Server 中更简单,因为UPDATE 可以引用FROM 中的别名。不用JOIN回到原表。

    所以:

    UPDATE tbl
      SET column1 = value1
      FROM table1 tbl JOIN
           table2 tbl2
           ON tbl2.id = tbl.id
      WHERE tbl2.code = 200;
    

    这假设idtable1 的主键(一个合理的假设)。

    【讨论】:

      【解决方案2】:

      您可以使用公用表表达式:

      WITH cte AS (
         SELECT tbl.column1
         FROM table1 tbl
         JOIN table2 tbl2 ON tbl2.id = tbl.id
         WHERE tbl2.code = 200
      )
      UPDATE cte SET column1 = value1;
      -- SELECT * FROM cte
      

      通过在 cte 中突出显示并仅运行 select 语句,您可以在进行实际更新之前检查结果。

      db<>fiddle demo

      【讨论】:

        猜你喜欢
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2018-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-10
        相关资源
        最近更新 更多