SQL查询更新需要帮助

5
我有一个名为 Student_Details 的表,包含以下列:IDRoll_NoStudent_NameStudent_AddressStudent_ClassID 是主键。 我的问题是每个学生的记录被分成两行。 例如,第一行包含:1, 20, john, '', '',第二行包含'2', '', '', 'ABCDEFG', 'A'。 我想从第二行的数据中更新 ID 为 1 的行中的 Student_AddressStudent_Class 字段的数据,然后删除第二行。在这个例子中,结果应该是 1,20,'john','ABCDEFG', 'A'。 有没有办法做到这一点?我不想使用游标,因为数据库有约 50000 行。

2
那么基本上每个偶数编号的“ID”都要合并到前面的奇数编号中,然后删除偶数编号的行?或者可能会有一些例外情况吗? - Martin Smith
是的,请具体说明这些记录是如何绑定在一起的。是像马丁建议的那样只有偶数和奇数ID值吗?还是涉及到其他规则?顺便说一句,这不是一个好的表设计。我希望你所做的(似乎是)是为了修复这个问题的一部分。 - Charles Bretana
1个回答

2

没有安装SQL Server,但使用标准的SQL语法在MySQL中使其可以工作,因此您也应该可以使用。

请注意,我为每个列创建了2个更新,因为MySQL似乎不支持UPDATE table SET (col1, col2) = (<具有2个列的子查询>)语法。

我还将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='';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,