我遇到了一个问题,想知道如果只是在我的数据库中添加条目的话。我找到了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
答案 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