gpt4 book ai didi

sql - 无法使 View 可更新 (PostgreSQL)

转载 作者:行者123 更新时间:2023-11-29 13:11:15 25 4
gpt4 key购买 nike

我有一张员工表,上面有他们的 ID、姓名和老板的 ID

| emp_id | name   | boss_id |
|--------|--------|---------|
| 100 | John | NULL |
| 110 | Carl | 100 |
| 120 | Andrew | 100 |
| 130 | Peter | 100 |
| 140 | Chris | 130 |
| 150 | Mary | 120 |
| 160 | Wayne | 110 |

然后我必须创建一个 View 来显示员工的姓名和他/她老板的姓名。我使用自连接来完成它:

CREATE OR REPLACE VIEW emps_and_bosses
AS SELECT e.name AS employee, b.name AS boss
FROM employees e JOIN employees b ON e.boss_id = b.emp_id

现在如果我想更新 View 中的日期(例如设置另一个名称),它会抛出一个错误:

ERROR:  cannot update view "emps_and_bosses"
DETAIL: Views that do not select from a single table or view are not automatically updatable.
HINT: To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule.

所以问题是我如何根据条件创建 View - 仅使用一个 FROM 基础(没有自连接,使 View 可更新)?

最佳答案

就像消息和doc一样(滚动到可更新的 View )说,有一些条件可以更新 View 。
由于您使用的是 JOIN,因此不满足其中 1 个条件。

提示建议创建触发器或无条件规则,这是我在下面所做的。

CREATE RULE UpdateBoss AS ON UPDATE TO emps_and_bosses
DO INSTEAD
UPDATE EMPLOYEES SET name = new.employee, Boss_id = (SELECT emp_id from employees where name = new.boss)
WHERE name = old.employee

重要提示:我想您的 employees 表在 emp_id 上有一个 primary key 而 View 没有显示。
小心 View 上的更新,因为您的两列都不是唯一的,因此当您打算只更新 1 条记录时,您很可能会更新多条记录。

关于sql - 无法使 View 可更新 (PostgreSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54411733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com