无法更新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_view
或raw_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表中的列的主要内容,如果未能解决你的问题,请参考以下文章