无法更新sql表中的列

Posted

技术标签:

【中文标题】无法更新sql表中的列【英文标题】:Can't update column in sql table 【发布时间】:2019-01-23 11:08:25 【问题描述】:

我创建了一个视图

CREATE VIEW `distance` AS
    SELECT 
        `rv`.`id` AS `id`,
        `rv`.`TIMESTAMP` AS `TIMESTAMP`,
        `rv`.`name` AS `name`,
        `rr`.`distance` AS `distance`,
        `false` AS `new_name`
    FROM
        (`recognition_view` `rv`
        JOIN `raw_recognition` `rr` ON ((`rv`.`rr_id` = `rr`.`id`)))

我需要更新new_name 列,但我收到响应错误列'new_name' 不可更新。有什么办法吗?

【问题讨论】:

“更新new_name”是什么意思?它是一个常量,而不是表中的列,因此您无法对其进行更新。 您确定使用的是 Db2 吗?反引号看起来很可疑。 【参考方案1】:

FROM 子句中有超过 1 个表。此视图无法更新。阅读Updatable views。 您可以创建一个instead of trigger 来实现您的目标。

【讨论】:

【参考方案2】:

new_name 不是您的表的一部分。它在您的视图中构建并始终设置为false。问问自己这个问题:更新这个专栏的结果是什么?它会在哪里持久化?

如果您希望能够更新此值,则应考虑将其添加到您的其他表之一,或创建一个新表并将其加入现有视图。

您可以将new_name 信息存储在recognition_viewraw_recognition 表中。为简单起见,我将解释如何做后者:

CREATE TABLE raw_recognition (
    ...
    new_name NUMBER(1)
)

然后在您的CREATE VIEW 中更改

`false` AS `new_name`

`rr.new_name` AS `new_name`

【讨论】:

我在前端更新了这个专栏。有时我需要将true 设置为new_name

以上是关于无法更新sql表中的列的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL 更新 Spark 表中的列

SQL 脚本。更新表中的列

如何使用不相关表中的列数据更新列 - MySQL

插入后使用 SQL Server 触发器更新另一个表中的列

SQL:根据另一个表的计数结果更新一个表中的列

获取 ajax 请求以更新 SQL 表中的列