需要“配合”UPDATE
用ORDER BY
。我正在尝试使用游标,但出现错误:
cursor "cursupd" doesn't specify a line, SQL state: 24000
代码:
BEGIN;
DECLARE cursUpd CURSOR FOR SELECT * FROM "table" WHERE "field" = 5760 AND "sequence" >= 0 AND "sequence" < 9 ORDER BY "sequence" DESC;
UPDATE "table" SET "sequence" = "sequence" + 2 WHERE CURRENT OF cursUpd;
CLOSE cursUpd;
COMMIT;
如何正确做?
没有光标时,我这样做:
UPDATE "CableLinePoint" AS "t"
SET "sequence" = t."sequence" + 2
from (
select max("sequence") "sequence", "id"
from "CableLinePoint"
where
"CableLine" = 5760
group by "id"
ORDER BY "sequence" DESC
) "s"
where "t"."id" = "s"."id" and "t"."sequence" = "s"."sequence"
我得到了唯一的错误。因此,需要从头开始而不是从头开始更新。
桌子:
id|CableLine|sequence
10| 2 | 1
11| 2 | 2
12| 2 | 3
13| 2 | 4
14| 2 | 5
需要更新(增加)字段“顺序”。“序列”具有“索引”类型,因此无法完成:
UPDATE "table" SET "sequence" = "sequence" + 1 WHERE "CableLine" = 2
当行中的“序列”id = 10
增加1时,1
我收到一条错误,指出"sequence" = 2
已存在另一行。
UPDATE
和 ORDER BY
至于所提问题的标题:ORDER BY
SQLUPDATE
命令中没有。Postgres以任意顺序更新行。但是,您有(有限的)选项来决定是在每行之后,每条语句之后还是在事务结束时检查约束。您可以避免带有约束的
中间 状态重复键冲突DEFERRABLE
。
我引用了我们在此问题下得出的结论:
NOT DEFERRED
在每行之后 检查约束。
DEFERRABLE
在每个语句之后* 检查设置为IMMEDIATE
(INITIALLY IMMEDIATE
或通过SET CONSTRAINTS
)的约束。 *
但是有局限性。外键约束要求在目标列上具有 不可延迟的 约束。
引用的列必须是引用表中不可延迟的唯一或主键约束的列。
问题更新后更新。
假设"sequence"
在正常操作中从不为负,则可以避免出现以下独特错误:
UPDATE tbl SET "sequence" = ("sequence" + 1) * -1
WHERE "CableLine" = 2;
UPDATE tbl SET "sequence" = "sequence" * -1
WHERE "CableLine" = 2
AND "sequence" < 0;
使用不可延迟约束(默认),您必须运行两个单独的命令才能使此工作生效。快速连续运行命令以避免并发问题。该解决方案显然不适用于繁重的并发负载。
另外:
可以跳过AS
表别名的关键字,但不建议对列别名执行相同的操作。
我建议不要使用SQL关键字作为标识符,即使允许这样做。
在更大的规模上或对于具有较大并发负载的数据库,使用serial
列进行行的相对排序比较明智。您可以row_number()
在视图或查询中使用窗口函数生成以1开头且没有空格的数字。考虑以下相关答案:
您应该重新考虑您的方法。您的表格只需一个简单的序列,然后将其结合起来user_id即可获得所需的排序顺序。
您始终可以使用row_number()简单的查询(例如:)来生成具有所需数字的自定义网址:
SELECT format('domain.me/username_%s/posts/%s'
,user_id
,row_number() OVER (PARTITION BY user_id ORDER BY seq_id)
)
FROM t;
问题内容: 我正在使用angular-filter中的 groupBy 按对象的date属性对对象数组进行分组。 产生以下内容: 如何从最近的日期开始颠倒顺序?当我打印到控制台时,以我想要的顺序打印阵列: 我还编写了一个自定义过滤器来反转groupBy之后的顺序: 我已经这样申请了: 问题答案: 最近有同样的问题。创建一个对象,但需要一个数组,因此涉及一些时髦。我最终从他们的问题页面直接得到了答案
问题内容: 我有一堂课说:“ ClassA”,其中包含“ ClassB”的集合 “ ClassB”具有使用普通旧映射注释的映射类“ ClassC”: 如何将@OrderBy批注添加到ClassA的ClassB的集合中,以便按ClassC的“名称”属性对集合进行排序 像这样: 我得到的都是Oracle异常,它说classC是未知的。 这里的任何帮助都将非常棒,因为此刻确实困扰着我。 PS我还应该提到
我尝试使用多个自定义字段显示结果,同时按第一个自定义字段(startdate)排序结果。我看到的建议让我尝试了以下方法: 问题是,如果没有meta_key参数,结果会默认过滤帖子的日期。当我添加meta_key参数对结果进行排序时,我得到的每一篇文章都有一个meta_key等于开始日期。通过添加这些meta_key参数,语句似乎完全忽略了meta_query数组中的条件。我如何让查询排序的开始日期
我有一个代码是这样的: } 有人知道为什么查询不能使用Order By time_end ASC吗???我尝试了并得到了相同的结果
从的lodash文档中: 将集合减少为一个值,该值是通过iteratee运行集合中每个元素的累积结果,其中每个后续调用都提供了前一个元素的返回值。如果未给出累加器,则使用集合的第一个元素作为初始值。iteratee由四个参数调用:(累加器、值、索引|键、集合)。 许多lodash方法被保护为像x这样的方法的迭代对象。减少。右减速器,和。使改变 受保护的方法有:assign、defaults、def
我有值和像0,1,然后我将使用降序获取数据使用以下查询。 但它只按降序显示。如果我使用另一个查询,如: 它只显示特色结果。我需要所有的广告帖子,按照
JPA为什么OrderBy应用于Set? https://docs.oracle.com/javaee/7/api/javax/persistence/OrderBy.html 该集合应该是未排序的。使用 Set 类型对属性@OrderBy进行注释是否有意义?
问题内容: 我正在尝试获得最受欢迎的黑客马拉松,这需要通过各自的黑客马拉松订购。抱歉,这有点难以理解。 我有以下格式的数据库: 该模型是: 并定义为: 我已经尝试过,但是我觉得我犯了一个大错误(可能是$ this-> id),因为它根本不起作用。 我将如何尝试获取基于最多的相关hackathon参与者的最受欢迎的hackathon? 问题答案: 编辑:如果使用Laravel 5.2或更高版本,请使