Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何更新列的每个数据?_Sql_Postgresql - Fatal编程技术网

Sql 如何更新列的每个数据?

Sql 如何更新列的每个数据?,sql,postgresql,Sql,Postgresql,我有一个名为class的表 |Record_No [PK] | Student_No | Class_No | Seat_No | ===================================================== |1 | 200910 | 2 | 20 | |2 | 201234 | 2 | 13 | |3 |

我有一个名为class的表

|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——试试上面的提琴演示——它可以与你的编辑一起使用。记录只是一种“快速方法”——根据需要使用另一个查询。祝你好运。