我有一个名为Student_Details
的表,其中包含以下列:
ID
,Roll_No
,Student_Name
,Student_Address
,Student_Class
。
ID
是主键。
我遇到一个问题,即每个学生的记录分为两行。
例如,第一行包含:1, 20, john, '', ''
,第二行包含:'2', '', '', 'ABCDEFG', 'A'
Student_Address
。
我想更新Student_Class
和1
中的数据
来自行2
中数据的ID为2
的行中的字段,然后
删除行1,20,'john',
'ABCDEFG', 'A'
。示例中的结果为{{1}}。
有没有办法做到这一点?我不想使用游标,因为 数据库有大约50000行。
答案 0 :(得分:2)
没有安装SQL Server,但是使用标准的SQL语法使它在MySQL中工作,所以它也适用于你。
请注意,我为每列创建了2 update -s,因为MySQL似乎不支持UPDATE table SET (col1, col2) = (<a subquery with 2 columns>)
语法。
我还将UPDATE子查询包装在另一个子查询中,这只是因为一些MySQL限制所必需的。
3个查询应该可以在一个事务中运行:
update student_details s0 set s0.student_address =
(
select student_address from (
select s1.id, s1.roll_no, s2.student_address
from student_details s1
join student_details s2
on s2.id=s1.id+1
) sub where sub.id = s0.id
)
where s0.roll_no <> '';
update student_details s0 set s0.student_class =
(
select student_class from (
select s1.id, s1.roll_no, s2.student_class
from student_details s1
join student_details s2
on s2.id=s1.id+1
) sub where sub.id = s0.id
)
where s0.roll_no <> '';
delete from student_details where roll_no='';