postgresql查询插入如果不存在具有形式params的插入



我有一个问题,弄清楚如何仅在数据库中添加条目。我发现不存在方法,但它不起作用。

restaurantsModel.create = (req, res, next) => {
    console.log("from restaurants.Model", req.body);
    db
        .manyOrNone(
            "INSERT INTO restaurants (res_id, name, city, image) VALUES ($1, $2, $3, $4) RETURNING * WHERE NOT EXISTS;",
            [
                req.body.restaurant_id,
                req.body.restaurant_name,
                req.body.restaurant_city,
                req.body.restaurant_image
            ]
        )
        .then(da

通常,对于这样的内容,您需要在实际的db表中添加唯一约束,以便如果试图插入重复行,您的代码只会收到错误。然后,您可以处理错误并将消息返回给用户。

但是,您可以使用插入语句,该语句将在执行插入之前检查具有所需值的记录。

INSERT INTO Restaurants (res_id, name, city, image)
SELECT DISTINCT $1, $2, "$3, $4
FROM Restaurants
WHERE NOT EXISTS (SELECT * FROM Restaurants WHERE res_id = $1 AND name = $2 
    AND city = $3 AND image = $4)

我不一定会推荐这种方法,因为您希望该应用程序通知用户存在重复行,而不是默默地不插入行。

您可能要执行此操作的另一个原因是因为执行要比在插入语句之前运行简单查询需要更长的时间来检查重复项或使用DB约束。

在您的sql中使用此语法:

if not exists **your condition**
begin
INSERT INTO restaurants (res_id, name, city, image) VALUES ($1, $2, $3, $4)
end

最新更新