Sql 如何更新列的每个数据?
我有一个名为class的表Sql 如何更新列的每个数据?,sql,postgresql,Sql,Postgresql,我有一个名为class的表 |Record_No [PK] | Student_No | Class_No | Seat_No | ===================================================== |1 | 200910 | 2 | 20 | |2 | 201234 | 2 | 13 | |3 |
|Record_No [PK] | Student_No | Class_No | Seat_No |
=====================================================
|1 | 200910 | 2 | 20 |
|2 | 201234 | 2 | 13 |
|3 | 200965 | 2 | 1 |
|4 | 200920 | 2 | 8 |
|5 | 200911 | 2 | 9 |
|6 | 200955 | 1 | 10 |
|7 | 200924 | 1 | 9 |
|8 | 200922 | 1 | 1 |
|9 | 200901 | 2 | 11 |
|10 | 200902 | 2 | 18 |
是否可以按照从1到最后一个座椅编号计数(其类别编号等于2)的顺序更新座椅编号中的编号
该表应如下所示:
|Record_No [PK] | Student_No | Class_No | Seat_No |
=====================================================
|1 | 200910 | 2 | 1 |
|2 | 201234 | 2 | 2 |
|3 | 200965 | 2 | 3 |
|4 | 200920 | 2 | 4 |
|5 | 200911 | 2 | 5 |
|6 | 200955 | 1 | 10 |
|7 | 200924 | 1 | 9 |
|8 | 200922 | 1 | 1 |
|9 | 200901 | 2 | 6 |
|10 | 200902 | 2 | 7 |
到目前为止,我只能通过使用
UPDATE class SET Seat_No = 1 WHERE Class_No = 2 AND Student_No = 200910;
UPDATE class SET Seat_No = 2 WHERE Class_No = 2 AND Student_No = 201234;
...
等等
我如何解决这个问题,而不把每个学生都放在查询中?请提供帮助。假设您的示例中的记录编号为1-5,您可以使用它:
UPDATE class SET Seat_No = Record_No WHERE Class_No = 2
如果不是,则取决于您的RDBMS
以下是postgresql方法:
UPDATE Class C
SET Seat_No = t.rn
FROM (
SELECT Record_No, ROW_NUMBER() OVER (ORDER BY Record_No) rn
FROM Class
WHERE Class_no = 2
) t
WHERE C.Record_No = t.Record_No
假设您的示例中的记录编号为1-5,您可以使用它:
UPDATE class SET Seat_No = Record_No WHERE Class_No = 2
如果不是,则取决于您的RDBMS
以下是postgresql方法:
UPDATE Class C
SET Seat_No = t.rn
FROM (
SELECT Record_No, ROW_NUMBER() OVER (ORDER BY Record_No) rn
FROM Class
WHERE Class_no = 2
) t
WHERE C.Record_No = t.Record_No
如果要更新所有类,请执行以下操作:
update class
set seat_no = s.rn
from (
select
row_number() over(partition by class_no order by record_no) rn,
record_no
from class
) s
where class.record_no = s.record_no
如果要更新所有类,请执行以下操作:
update class
set seat_no = s.rn
from (
select
row_number() over(partition by class_no order by record_no) rn,
record_no
from class
) s
where class.record_no = s.record_no
您使用的是MySQL还是Postgres?您使用的是MySQL还是Postgres?谢谢,但是有没有其他方法可以解决我的问题而不使用record\u no?等等,我将编辑我的表以进行澄清。@oyan11您的编辑对解决方案没有影响。你试过了吗?谢谢,但是有没有别的方法不用记录就可以解决我的问题?等等,我将编辑我的表以进行澄清。@oyan11您的编辑对解决方案没有影响。你试过了吗?@oyan11——试一下上面的提琴演示——它可以与你的编辑一起使用。记录只是一种“快速方法”——根据需要使用另一个查询。祝你好运。@oyan11——试试上面的提琴演示——它可以与你的编辑一起使用。记录只是一种“快速方法”——根据需要使用另一个查询。祝你好运。