oracle 用另一个结构完全不同的表更新表

bmvo0sr5  于 2023-06-29  发布在  Oracle
关注(0)|答案(1)|浏览(178)

用另一个结构完全不同的表更新表

表A

| 班级|主题|马克斯|联系方式|城市|年龄| Age |
| - -----|- -----|- -----|- -----|- -----|- -----| ------------ |
| 2|数学|三十四|英国|JK| 5个| 5 |
| 三个|英语|十二岁|CH| TW|七个| 7 |

表B

| 班级|主题|马克斯|年龄| Age |
| - -----|- -----|- -----|- -----| ------------ |
| 2|数学|三十四|六| 6 |
| 三个|英语|十二岁|九个| 9 |
已经做了一些计算,现在需要更新表A中的年龄,以与表B进行比较
主键:-对于两个表都是
姓名班级科目标注年龄

表A的最终输出

| 班级|主题|马克斯|联系方式|城市|年龄| Age |
| - -----|- -----|- -----|- -----|- -----|- -----| ------------ |
| 2|数学|三十四|英国|JK|六| 6 |
| 三个|英语|十二岁|CH| TW|九个| 9 |

z5btuh9x

z5btuh9x1#

不要存储AGE,因为它会在每次某人生日时更改。
存储出生日期,对于每个用户都是常数,您可以使用它来计算年龄。
如果你真的想更新它,那么:

MERGE INTO a
USING b
ON (a.name = b.name AND a.class = b.class)
WHEN MATCHED THEN
  UPDATE SET age = b.age;

根据您想要匹配的内容,您还可以为连接的ON子句添加主题和标记。
注意事项:

  • 最好有一个唯一的主键来标识每个人。
  • 以第三范式(3NF)存储数据也会更好,因为姓名,班级,地址,城市和出生日期是特定于用户的,但用户可能有许多主题,每个主题都有标记,因此您将在每行中重复姓名,班级,地址,城市和出生日期数据。别这样在3NF中将数据拆分到多个表中。

相关问题