【问题标题】:Update unique values into Postgres Array将唯一值更新到 Postgres 数组中
【发布时间】:2018-11-16 09:19:14
【问题描述】:

我有一种情况,我更新了bigint[] 类型的Postgres 表列。每当触发 update 查询时,该数组内部应该有唯一的数字。

查询如下

UPDATE book_shelf 
SET book_id = book_id || array[CAST(:bookID AS BIGINT)], updated_at = now() 
WHERE user_id = :userID AND shelf_name = :shelfName

当上述查询被触发时,它只是将数字添加到我不想发生的数组中。它应该只包含唯一值。请帮帮我。

【问题讨论】:

    标签: spring postgresql hibernate spring-data-jpa


    【解决方案1】:

    你可以在添加之前检查它是否存在于数组中:

    UPDATE book_shelf 
    SET book_id = CASE WHEN CAST(:bookID AS BIGINT) = ANY(book_id) THEN book_id ELSE ARRAY_APPEND(book_id, CAST(:bookID AS BIGINT)) END, updated_at = now() 
    WHERE user_id = :userID AND shelf_name = :shelfName
    

    当然,如果updated_at 应该只在book_id 实际更新时才设置,然后将检查放在 WHERE 子句中,这样就不会不必要地更新:

    UPDATE book_shelf 
    SET book_id = ARRAY_APPEND(book_id, CAST(:bookID AS BIGINT)), updated_at = now() 
    WHERE user_id = :userID
    AND shelf_name = :shelfName
    AND NOT CAST(:bookID AS BIGINT) = ANY(book_id)
    

    【讨论】:

    • 非常感谢。像魅力一样工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2014-02-26
    • 2022-01-24
    • 2015-11-13
    • 1970-01-01
    • 2017-05-30
    • 2011-08-18
    相关资源
    最近更新 更多