Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
PostgreSQL:为引用创建一系列唯一的数字_Sql_Postgresql - Fatal编程技术网

PostgreSQL:为引用创建一系列唯一的数字

PostgreSQL:为引用创建一系列唯一的数字,sql,postgresql,Sql,Postgresql,我举了一个例子: 我正在构建的是一对多,尽管对于这个例子来说,多对多将是更真实的生活 我需要完成的是: 我应该能够为author表中的authororder列生成描述整数序列的author order,从数字1开始,这样每个数字在参考书中都是唯一的。因此,对于每一位作者来说,在某一本书的参考文献中,数字从1到2,到3等等。 此外,还应生成authororder的数字,以反映author.fullname的顺序(如:“按fullname从作者顺序中选择*”) 我尝试使用sequence,但并没有

我举了一个例子:

我正在构建的是一对多,尽管对于这个例子来说,多对多将是更真实的生活

我需要完成的是: 我应该能够为author表中的authororder列生成描述整数序列的author order,从数字1开始,这样每个数字在参考书中都是唯一的。因此,对于每一位作者来说,在某一本书的参考文献中,数字从1到2,到3等等。 此外,还应生成authororder的数字,以反映author.fullname的顺序(如:“按fullname从作者顺序中选择*”)

我尝试使用sequence,但并没有像我希望的那样重置每本书的序列号,相反,序列号继续增加(我猜应该是这样)。我还尝试在row_number()的帮助下完成这项工作,但无法准备一个脚本来实现我想要的目标

生成authororder后的最终结果如下:

author_id       fullname          mobileno            fk_book_id           authororder
100           John Green            30303                 1                     (1)
101           Maureen Johnson       4343                  1                     (3)
102           Lauren Myracle        76665                 1                     (2)
103           Greg Mortenson        6434                  2                     (2)
104           David Oliver Relin    72322                 2                     (1)
105           Marco Polo            54321                 3                     (3)
106           Angus MacGyver        27234                 3                     (1)
107           Timo TA               83451                 3                     (4)
108           Anonymous             55554                 3                     (2)
你似乎想要:

row_number() over (partition by fk_book_id order by fullname) as authororder
您可以将其合并到更新中,如下所示:

update author a
    set authororder = new_authororder
    from (select a.*, 
                 row_number() over (partition by fk_book_id order by fullname) as new_authororder
          from author a
         ) aa
    where a.authorid = aa.authorid;

太好了,谢谢!如何用代码片段的结果更新实际的authororder值?