我有view
定义:
CREATE VIEW `view` AS
SELECT a.id,
COALESCE(COALESCE(b.name, c.name), a.name) AS name
FROM a_table a
LEFT JOIN b_table b on a.b_id = b.id
LEFT JOIN c_table c on a.c_id = c.id
在我使用新a_table
更新name
行后,我的view
内的更新未得到更新。但是,如果我将name
更改为COALESCE(a.name, COALESCE(b.name, c.name)) AS name
则可行。
据我所知,原因在于COALESCE
。它需要第一个not null
值,在我的情况下是b.name
,只有在b.name
更新时才会更新。
当view
的任何值发生变化时,是否有更新COALESCE
的选项?
答案 0 :(得分:1)
COALESCE()
在视图中工作正常。它也需要多个参数,因此我建议将其写为:
CREATE VIEW `view` AS
SELECT a.id, COALESCE(b.name, c.name, a.name) AS name
FROM a_table a LEFT JOIN
b_table b
ON a.b_id = b.id LEFT JOIN
c_table c
ON a.c_id = c.id;
视图未“更新”。它们是在引用视图时插入查询的SQL代码。数据来自基础表。