如何在排序列中插入 max(ordering) + 1 的表?

Posted

技术标签:

【中文标题】如何在排序列中插入 max(ordering) + 1 的表?【英文标题】:How to insert into table with max(ordering) + 1 in ordering column? 【发布时间】:2021-08-30 12:32:54 【问题描述】:

我在 Postgres 中有一个带有 ordering 列(整数)的 chapters 表。如何在柴油中插入/创建ordering 设置为MAX(ordering) + 1 的新行?我尝试使用原始 sql 如下:

INSERT INTO chapters
(id, name, user_id, book_id, ordering, date_created, date_modified)
SELECT ?, ?, ?, ?, IFNULL(MAX(ordering), 0) + 1, ?, ?
FROM chapters
WHERE book_id = ?;

并通过以下方式插入:

 let id = Uuid::new_v4().to_string_id();
    let now = Utc::now().naive_utc();
    diesel::sql_query(INSERT_CHAPTER)
        .bind::<Text, _>(&id)
        .bind::<Text, _>(name)
        .bind::<Text, _>(uid)
        .bind::<Text, _>(bid)
        .bind::<Timestamp, _>(&now)
        .bind::<Timestamp, _>(&now)
        .bind::<Text, _>(bid)
        .execute(conn)?;

它适用于 Sqlite3 后端,但在 Pg 后端失败并显示以下错误消息:

"syntax error at or near \",\""

【问题讨论】:

【参考方案1】:

使用 $N 作为 Postgres 的占位符,使用 ? 作为 sqlite3 的占位符。

【讨论】:

以上是关于如何在排序列中插入 max(ordering) + 1 的表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在oracle表格中自动插入当前时间?

Oracle SQL:根据在另一个表中给定条件的列中找到的值插入

需要将值添加到现有的行和列中

Mysql ORDER BY 或 MAX() 用于几个表字段排序?

R语言使用sapply函数抽取strsplit分裂后的结果数据并使用cbind纵向合并到dataframe数据列中使用order函数对dataframe数据行进行排序

在数据透视列中排序而不在结果中