pg提供了一种快速删除元组集的方法

lmyy7pcs  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(374)

有没有更好的方法来写以下内容:

DELETE FROM
    table
WHERE
    _id = $<id>
    AND (
        item_id = $<item_id>
        AND map_id = $<map_id>
        OR
        item_id = $<another_id>
        AND map_id = $<another_map_id>
        ...
    )

我的数据集格式是:

[
    {
        item_id: "some_id",
        map_id: "other_id"
    }
    ...
]

用什么方法写这个 pg-promise ,甚至只是普通的postgresql?

nkhmeac6

nkhmeac61#

DELETE FROM table
WHERE
    _id = $<id>
    AND (item_id, map_id) IN ($<values:raw>)

如果您有以下输入数据:

const input = [
    {
        item_id: 'some_id',
        map_id: 'other_id'
    }
    ...
];

然后你就可以生成 values pg承诺如下(见helpers.values):

const values = pgp.helpers.values(input, ['item_id', 'map_id']);

或者,如果需要更多的细节,比如类型转换等,可以将列作为完整的列集传递。

lawou6xi

lawou6xi2#

postgres支持元组相等,因此您可以这样写:

DELETE FROM table
WHERE
    _id = $<id>
    AND (item_id, map_id) IN ( 
        ($<item_id>, $<map_id>),
        ($<another_id>, $<another_map_id>),
        ...
    )

相关问题