当前位置: 首页 > 知识库问答 >
问题:

在复合唯一约束中重新编号键

顾超
2023-03-14
| id | sub_id | fk_id |
|----|--------|-------|
| 1  | 1      | 1     |
| 2  | 2      | 1     |
| 3  | 3      | 1     |
| 4  | 4      | 1     |
| 5  | 5      | 1     |
| 6  | 1      | 2     |
| 7  | 2      | 2     |
| 8  | 3      | 2     |
| 9  | 4      | 2     |
| 10 | 5      | 2     |

我该如何进行重新编号?我在想一种INSERT...SELECT查询,但我不知道它应该如何工作。

共有1个答案

钱锦
2023-03-14

您可以使用以下查询为给定的fk_id重新编号行:

select t_renum.*, count(t_lower.id) as new_sub_id
from mytable t_renum
join mytable t_lower
    on  t_lower.fk_id = t_renum.fk_id
    and t_lower.id <= t_renum.id
where t_renum.fk_id = @renumber_fk_id
group by t_renum.id

可以将结果与原始表连接起来进行更新,如下所示:

sql prettyprint-override">update mytable t
join (
    select t_renum.*, count(t_lower.id) as new_sub_id
    from mytable t_renum
    join mytable t_lower
        on  t_lower.fk_id = t_renum.fk_id
        and t_lower.id <= t_renum.id
    where t_renum.fk_id = @renumber_fk_id
    group by t_renum.id 
) t_renum using (id)
set t.sub_id = t_renum.new_sub_id

SQLFiddle

 类似资料:
  • 问题内容: 这是我的模型: 每个书的编号从每位作者的1开始并向上递增。因此,我们将有John Grisham撰写的1,2,3本书,George Martin撰写的1..5本书,等等。 我是否可以设置一个唯一的约束条件,以确保我们不会有两本书的作者相同?与相似,但约束仅适用于?的复合 问题答案: 用途:

  • 我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误: 重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。 我试图把放到 models.py,但它根本没有帮助。 models.py views.py 更新 当我登录到另一个用户时,一个

  • 当并发客户机试图将数据插入子表时,我们面临唯一的约束冲突问题。 假设我们有1以下的表格。用户user_id、first_name、last_name。2.项目project_idproject_name和project_description。 两者都有着多对多的关系。 当两个客户端试图创建一个新用户时。假设client1创建了user1(id=aa1),子记录项目(id=1)。Client2还创

  • 这是我的stacktrace: 学生表: 学生实体:学生标识默认为自动递增 postgres控制台(这些学生由sql脚本创建): 在此处输入图像描述 我也尝试过这样生成,但这没有帮助 我用postgreql它似乎我有问题与id Generator,谢谢你的想法和答案

  • 我在django应用程序中创建了一个模型,并从pgadmin将数据填充到表中,但现在当我试图从应用程序创建记录时,它抛出了这个完整性错误: 重复的键值违反了唯一约束“packsapp_foo_pkey” 详细信息:键(id)=(4)已经存在。 这是models.py 我是否总是必须从应用程序本身插入数据? Views.py