我希望在 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 子句沒有發生插入或更新?
uj5u.com熱心網友回復:
該RETURNING子句不能用于獲取不受影響的行。
你可以做的是在SELECT之前執行一條陳述句UPSERT:
WITH cte(name, phonenumber, validDate) AS (VALUES
('Alice', '704-555-1212', '2018-05-08'),
('Bob','804-555-1212', '2018-05-09')
)
SELECT *
FROM phonebook2 p
WHERE EXISTS (
SELECT *
FROM cte c
WHERE c.name = p.name AND c.validDate <= p.validDate
);
在CTE您可以包含任意數量的元組
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/533260.html
