0

我创建了一个视图

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'不可更新。有什么办法吗?

4

2 回答 2

1

FROM子句中有超过 1 个表。此视图无法更新。阅读可更新视图。您可以创建一个代替触发器来实现您的目标。

于 2019-01-23T11:29:18.580 回答
0

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`
于 2019-01-23T11:16:15.400 回答