关系 {table_name} 的列 {table_name} 不存在 SQL 状态:42703

6 postgresql update table

使用指定的表名和列名运行更新查询时出现错误:

UPDATE Temp SET Temp.Id='234',Temp.Name='Test'WHERE Id='245'
Run Code Online (Sandbox Code Playgroud)

这是错误:

ERROR:  column "temp" of relation "temp" does not exist
LINE 1:      UPDATE Temp SET Temp.Id='23...
                               ^
********** Error **********

ERROR: column "temp" of relation "temp" does not exist
SQL state: 42703
Character: 24
Run Code Online (Sandbox Code Playgroud)

dez*_*zso 13

你不能(不用)使用表别名(或表名合格的列名)中SET的条款UPDATE。这甚至是有道理的,因为您只能在单个 中更新单个表UPDATE,因此那里的列名没有歧义。

幸运的是,有用的文档明确提到了您的案例:

列名

由 命名的表中列的名称table_name。如果需要,可以使用子字段名称或数组下标来限定列名称。不要在目标列的规范中包含表的名称 - 例如,UPDATE tab SET tab.col = 1无效。

因此,解决方案是简单地temp.SET子句中删除:

UPDATE temp SET id = '234', name = 'Test' WHERE id = '245'
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您真的将数字存储为文本吗?如果是,为什么?它通常是灾难的秘诀。例如,您如何防止'mkjcvnd7y78r3tgbhvcjh'进入您的id专栏之类的事情?
  • 您使用以大写字母开头的对象名称的方式令人困惑。没有双引号它的名字,你的表实际上被称为temp而不是Temp. 以后一种方式使用它可能会降低可读性(当然,这取决于您的偏好和习惯)。