問題和背景
我們在寫 sql 語句的時候,經(jīng)常會涉及到關(guān)聯(lián)表更新,舉例:
下面有兩個表 user 和 kpi_ratio,下面想計算 user 表每個人的 kpi(現(xiàn)在是0),兩個表的 id 是可以關(guān)聯(lián)的,公式 kpi = 100 * ratio
user 表:
+----+--------------+-----+
| id | name | kpi |
+----+--------------+-----+
| 1 | 貝克漢姆 | 0 |
| 2 | 姆巴佩 | 0 |
| 3 | 卡卡 | 0 |
+----+--------------+-----+
kpi_ratio 表:
+----+-------+
| id | ratio |
+----+-------+
| 1 | 0.5 |
| 2 | 0.7 |
| 3 | 0 |
+----+-------+
update inner join 解決
update user u inner join kpi_ratio kr on u.id = kr.id
set u.kpi = 100 * kr.ratio where 1=1 -- where 1=1 是為了安全執(zhí)行sql,與邏輯無關(guān)
-- 或者
update user u, kpi_ratio kr
set u.kpi = 100 * kr.ratio
where u.id = kr.id
執(zhí)行結(jié)果正確:
+----+--------------+-----+
| id | name | kpi |
+----+--------------+-----+
| 1 | 貝克漢姆 | 50 |
| 2 | 姆巴佩 | 70 |
| 3 | 卡卡 | 0 |
+----+--------------+-----+
建表語句
-- 創(chuàng)建員工表
create table user
(
id int auto_increment comment '主鍵id',
name varchar(32) default '' not null comment '名字',
kpi int default 0 not null comment '績效',
constraint user_pk
primary key (id)
)
comment '員工';
-- 績效系數(shù)表
create table kpi_ratio
(
id int not null comment '員工id',
ratio double default 0 not null,
constraint kpi_ratio_pk
primary key (id)
)
comment '績效系數(shù)';
-- 插入數(shù)據(jù)
insert into user(name, kpi) values ('貝克漢姆', 0);
insert into user(name, kpi) values ('姆巴佩', 0);
insert into user(name, kpi) values ('卡卡', 0);
insert into kpi_ratio values (1, 0.5);
insert into kpi_ratio values (2, 0.7);
insert into kpi_ratio values (3, 0);
簡書作者 小菜荔枝原創(chuàng) 轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)