首页 > 解决方案 > SQL:我需要一列根据其他列的值自动更新其值

问题描述

假设我们有两个表:

bonus.id是一个引用 PK 'employees.id' 的 FK。

我想默认total等于employees.salary + bonus.increase。我还希望在工资或奖金更新时将值分配给总计。

哪些 sql 或 pl/sql 语句能够做到这一点?

注意:我绝对是菜鸟。

标签: sqloracleplsql

解决方案


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<>在这里摆弄


推荐阅读