如何在没有主键的情况下仅更新 SQL 中的重复行之一?
How to update only one of duplicated rows in SQL without primary keys?
我有一个 table,其中包含以下列:
st_id
sbj_id
desc
scr
sbm_dt
2001
10
Q2
7.4
2021-05-03 17:03:32
2001
10
Q1
8.0
2021-04-03 18:07:35
2011
10
Q1
5.0
2021-04-03 19:07:35
2001
10
Q2
7.4
2021-05-03 17:03:32
我想将 table 最后一行的 st_id
值更新为 2011
。当其中没有主键时,如何仅更新此 table 中的一个重复值?
预期结果:
st_id
sbj_id
desc
scr
sbm_dt
2001
10
Q2
7.4
2021-05-03 17:03:32
2001
10
Q1
8.0
2021-04-03 18:07:35
2011
10
Q1
5.0
2021-04-03 19:07:35
2011
10
Q2
7.4
2021-05-03 17:03:32
架构和插入语句:
create table testTable(st_id int, sbj_id int, description varchar(50), scr float, sbm_dt datetime);
insert into testTable values(2001, 10, 'Q2', 7.4, '2021-05-03 17:03:32');
insert into testTable values(2001, 10, 'Q1', 8.0, '2021-04-03 18:07:35');
insert into testTable values(2011, 10, 'Q1', 5.0, '2021-04-03 19:07:35');
insert into testTable values(2001, 10, 'Q2', 7.4, '2021-05-03 17:03:32');
更新查询:
update testTable set st_id=2011 where st_id=2001 order by sbm_dt desc limit 1
查询:
select * from testTable
输出:
st_id
sbj_id
description
scr
sbm_dt
2011
10
Q2
7.4
2021-05-03 17:03:32
2001
10
Q1
8
2021-04-03 18:07:35
2011
10
Q1
5
2021-04-03 19:07:35
2001
10
Q2
7.4
2021-05-03 17:03:32
db<>fiddle here
我有一个 table,其中包含以下列:
st_id | sbj_id | desc | scr | sbm_dt |
---|---|---|---|---|
2001 | 10 | Q2 | 7.4 | 2021-05-03 17:03:32 |
2001 | 10 | Q1 | 8.0 | 2021-04-03 18:07:35 |
2011 | 10 | Q1 | 5.0 | 2021-04-03 19:07:35 |
2001 | 10 | Q2 | 7.4 | 2021-05-03 17:03:32 |
我想将 table 最后一行的 st_id
值更新为 2011
。当其中没有主键时,如何仅更新此 table 中的一个重复值?
预期结果:
st_id | sbj_id | desc | scr | sbm_dt |
---|---|---|---|---|
2001 | 10 | Q2 | 7.4 | 2021-05-03 17:03:32 |
2001 | 10 | Q1 | 8.0 | 2021-04-03 18:07:35 |
2011 | 10 | Q1 | 5.0 | 2021-04-03 19:07:35 |
2011 | 10 | Q2 | 7.4 | 2021-05-03 17:03:32 |
架构和插入语句:
create table testTable(st_id int, sbj_id int, description varchar(50), scr float, sbm_dt datetime);
insert into testTable values(2001, 10, 'Q2', 7.4, '2021-05-03 17:03:32');
insert into testTable values(2001, 10, 'Q1', 8.0, '2021-04-03 18:07:35');
insert into testTable values(2011, 10, 'Q1', 5.0, '2021-04-03 19:07:35');
insert into testTable values(2001, 10, 'Q2', 7.4, '2021-05-03 17:03:32');
更新查询:
update testTable set st_id=2011 where st_id=2001 order by sbm_dt desc limit 1
查询:
select * from testTable
输出:
st_id | sbj_id | description | scr | sbm_dt |
---|---|---|---|---|
2011 | 10 | Q2 | 7.4 | 2021-05-03 17:03:32 |
2001 | 10 | Q1 | 8 | 2021-04-03 18:07:35 |
2011 | 10 | Q1 | 5 | 2021-04-03 19:07:35 |
2001 | 10 | Q2 | 7.4 | 2021-05-03 17:03:32 |
db<>fiddle here