gpt4 book ai didi

sql - 在顶部 SQL 插入后减少列中的所有值

转载 作者:行者123 更新时间:2023-11-29 13:15:48 25 4
gpt4 key购买 nike

Before Inserting
Id Priority
1 . 1
2 . 2
3 . 3

After Inserting Id: 4, Priority 2
Id Priority
1 . 1
4 . 2
2 . 3
3 . 4

对 postgres 相当陌生,我有一个表,其中有一列名为 priority。此列应具有唯一值,如果您尝试为某行赋予一个已经存在的优先级,它基本上会以该优先级插入它,并将所有 <= 的优先级递减一个以适应它。

这种行为有专门的术语吗?我知道它将涉及一个具有唯一值的列,但是我可以引入任何模型约束来实现这种行为吗?还是我需要手动编写算法来执行此操作并考虑所有边缘情况。

最佳答案

我不会存储优先级,因为它是自己的字段。创建表作为 ID、优先级、Date_entered。然后使用:

Select ID, rank() over (order by priority, date_entered) as priority
...

我怀疑由于排名变化如此频繁,因此像这样动态计算它比尝试存储排名并保持更新要优先。

编辑:这有一个我已经可以发现的逻辑缺陷......如果记录 4 作为优先级 2 插入(因此数据库包含 2 个优先级 2 记录),那么在 ID 4 之间注入(inject) ID 5 真的不是一个简单的方法和 2 不操纵 date_entered 字段。

第二次编辑:允许优先级列为小数(输入优先级 2,然后输入优先级 2.5,依此类推),然后使用 rank() 函数将其解析为整数可以解决这个问题。我在这里找不到漂亮的答案

关于sql - 在顶部 SQL 插入后减少列中的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49265650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com