如何在 SQLite 中检查匹配以插入新数据或更新它们?
How to check for matching in SQLite in order to insert new data or update them?
如果列 EqpCode 不存在匹配值,我想将数据插入 table。如果有任何匹配项,我想更新该行。
我使用了这个查询,但它在 WHERE:
附近有语法错误
INSERT INTO FileInfo(EqpCode, EqpName, FileName) VALUES ('123', 'test01', 'test02')
WHERE NOT EXISTS (SELECT 1 FROM FileInfo WHERE EqpCode='123')
首先,您必须将 EqpCode
列定义为 UNIQUE
(如果 table 中没有,则为 PRIMARY KEY
):
CREATE TABLE FileInfo(
id INTEGER PRIMARY KEY,
EqpCode TEXT UNIQUE,
EqpName TEXT,
FileName TEXT
);
然后使用SQLite的UPSERT
:
INSERT INTO FileInfo(EqpCode, EqpName, FileName) VALUES ('123', 'test01', 'test02')
ON CONFLICT(EqpCode) DO UPDATE
SET EqpName = EXCLUDED.EqpName,
FileName = EXCLUDED.FileName;
这样,仅当 table 中不存在 '123'
时才会插入新行。
如果确实存在,则该行将使用提供的 EqpName
和 FileName
值进行更新。
参见demo。
如果列 EqpCode 不存在匹配值,我想将数据插入 table。如果有任何匹配项,我想更新该行。 我使用了这个查询,但它在 WHERE:
附近有语法错误INSERT INTO FileInfo(EqpCode, EqpName, FileName) VALUES ('123', 'test01', 'test02')
WHERE NOT EXISTS (SELECT 1 FROM FileInfo WHERE EqpCode='123')
首先,您必须将 EqpCode
列定义为 UNIQUE
(如果 table 中没有,则为 PRIMARY KEY
):
CREATE TABLE FileInfo(
id INTEGER PRIMARY KEY,
EqpCode TEXT UNIQUE,
EqpName TEXT,
FileName TEXT
);
然后使用SQLite的UPSERT
:
INSERT INTO FileInfo(EqpCode, EqpName, FileName) VALUES ('123', 'test01', 'test02')
ON CONFLICT(EqpCode) DO UPDATE
SET EqpName = EXCLUDED.EqpName,
FileName = EXCLUDED.FileName;
这样,仅当 table 中不存在 '123'
时才会插入新行。
如果确实存在,则该行将使用提供的 EqpName
和 FileName
值进行更新。
参见demo。