Mysql:關(guān)聯(lián)表批量更新

問題和背景

我們在寫 sql 語句的時候,經(jīng)常會涉及到關(guān)聯(lián)表更新,舉例:
下面有兩個表 userkpi_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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容