COALESCE是否可以正常使用VIEW?

时间:2017-07-24 11:20:28

标签: mysql sql

我有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的选项?

1 个答案:

答案 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代码。数据来自基础表。