SQL查询INSERT if NOT EXISTS with form params

时间:2018-03-29 16:34:52

标签: sql postgresql pg-promise

我遇到了一个问题,想知道如果只是在我的数据库中添加条目的话。我找到了NOT EXISTS方法,但它没有用。

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

2 个答案:

答案 0 :(得分:1)

通常对于这样的事情,您可能希望在实际的数据库表中添加UNIQUE约束,以便在尝试插入重复行时,您的代码只会收到错误。然后,您可以处理错误并向用户返回一条消息。

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

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)

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

您可能想要执行此操作的另一个原因是,执行操作所需的时间比在insert语句之前运行简单查询以检查重复项或使用数据库约束要长。

答案 1 :(得分:0)

在SQL中使用此语法:

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