sql - SQL:我需要一列根据其他列的值自动更新其值
问题描述
假设我们有两个表:
Employees
(身份证(pk),工资)Bonus
(id(fk),增加,总计)
bonus.id
是一个引用 PK 'employees.id' 的 FK。
我想默认total
等于employees.salary + bonus.increase
。我还希望在工资或奖金更新时将值分配给总计。
哪些 sql 或 pl/sql 语句能够做到这一点?
注意:我绝对是菜鸟。
解决方案
bonus
如果表的行和表之间总是一一对应,employees
那么更好的解决方案是推回需求是错误的,bonus
表应该滚动到employee
表中,total
列可以是VIRTUAL
列:
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
salary NUMBER,
bonus NUMBER,
total NUMBER GENERATED ALWAYS AS ( salary + COALESCE( bonus, 0 ) )
);
INSERT INTO employees ( id, salary, bonus )
SELECT 1, 100, 10 FROM DUAL UNION ALL
SELECT 2, 100, NULL FROM DUAL;
然后:
SELECT * FROM employees;
输出:
身份证 | 工资 | 奖金 | 全部的 -: | -----: | ----: | ----: 1 | 100 | 10 | 110 2 | 100 | 空| 100
db<>在这里摆弄
推荐阅读
- mlab - 无法使用远程 MongoDB 登录 Keystone
- android - 从 Google Play 商店获取评论
- javascript - 使用 JavaScript 执行操作系统命令?
- sql-server - 从 CosmosDB 读取并写入 Azure SQL
- testing - 从命令行运行空手道测试会返回 surefire-plugin 错误
- c# - 如何增加工具提示矩形大小
- c - 将指向较大数组的指针分配给指向较小 VLA 的指针
- webpack - Nativescript webpack 捆绑全局变量
- encryption - 在 Inno Setup 中对字符串进行编码并将值保存到文件中
- filesystems - 使用 fdisk 更改分区会显示类似“partition#x contains ext4-signature”的警告