postgresql - 从查询结果中设置默认值
问题描述
我有两张桌子:
menu
id | tag
---------------------------
1 | a
2 | a
3 | b
4 | b
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)
感谢您的帮助。
解决方案
您必须将修改分为三个步骤:
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;
您可以将这些转换包含在一个事务中,以对您的架构进行原子修改。
推荐阅读
- javascript - 从函数中的子组件调用 prop 不起作用
- java - Java Web 应用程序 HTTPS 仅在 -Djavax.net.debug=all 设置时有效
- javascript - 如何从 .find JS 返回副本?
- html - 我的 html 代码没有显示在我的网站上,可能是什么问题?
- python-3.6 - Spyder 调试器导致深度递归
- sql - 连接来自不同服务器的两个 sys.columns 表
- python-3.x - 如何在不再次运行整个函数的情况下获取函数值
- forms - Symfony4.3 EntityType 中查询生成器提供的排序首选选项
- visual-studio-code - 如何通过 CLI 打开 VS Code 并将命令传递给集成终端
- javascript - 固定标题表出现水平滚动问题