我希望在SQLite数据库(版本高于3.35)中插入或更新值,以避免多个查询。upsert
和returning
似乎很有希望:
CREATE TABLE phonebook2(
name TEXT PRIMARY KEY,
phonenumber TEXT,
validDate DATE
);
INSERT INTO phonebook2(name,phonenumber,validDate)
VALUES('Alice','704-555-1212','2018-05-08')
ON CONFLICT(name) DO UPDATE SET
phonenumber=excluded.phonenumber,
validDate=excluded.validDate
WHERE excluded.validDate>phonebook2.validDate RETURNING name;
这有助于我跟踪与插入/修改的行对应的名称。如何查找phonebook2
值与上述语句中的值冲突,但由于WHERE子句而没有发生INSERT或UPDATE?
1条答案
按热度按时间v09wglhw1#
RETURNING
子句不能用于获取不受影响的行。您可以做的是在
UPSERT
之前执行一条SELECT
语句:在
CTE
中,您可以包含任意数量的元组