首页 > 解决方案 > 从查询结果中设置默认值

问题描述

我有两张桌子:

  1. menu
      id     |     tag  
---------------------------    
      1      |      a
      2      |      a
      3      |      b
      4      |      b
  1. free_menu
      id     |   menu_id  
---------------------------    
      1      |      3
      2      |      2
      3      |      1

我想为 free_menu 表创建一个类别列,它在菜单表中具有相同的值,所以它可以如下所示。

      id     |   menu_id   |     tag
------------------------------------------  
      1      |      3      |      b
      2      |      2      |      a
      3      |      1      |      a

我只想在将新列添加到表时为其设置默认值free_menu,但以下方法不起作用:

ALTER TABLE free_menu
ADD category VARCHAR(10) NOT NULL
DEFAULT (SELECT category FROM menu WHERE id = menu_id)

感谢您的帮助。

标签: postgresqlddl

解决方案


您必须将修改分为三个步骤:

ALTER TABLE free_menu ADD category VARCHAR(10) NULL;
UPDATE free_menu f SET category = m.category FROM menu m WHERE m.id = f.menu_id;
ALTER TABLE free_menu ALTER category SET NOT NULL;

您可以将这些转换包含在一个事务中,以对您的架构进行原子修改。


推荐阅读