使用sqlite如何使用条件更新或插入表?
有三列空白表的使用sqlite如何使用条件更新或插入表?,sqlite,Sqlite,有三列空白表的 CREATE TABLE AssyData ( AID int NOT NULL PRIMARY KEY UNIQUE , MaxDef float , MaxDefLC int , MaxDefNID int , Comps text , SubAssys text ) 如果新的MaxMag大于当前的MaxMag,并且辅助值相同,我希望更新或插入新值。援助是唯一的主键。假设援助额为100,我尝试了以下方法,但没有成功: INSERT INTO AssyData (
CREATE TABLE AssyData ( AID int NOT NULL PRIMARY KEY UNIQUE , MaxDef float , MaxDefLC int , MaxDefNID int , Comps text , SubAssys text )
如果新的MaxMag大于当前的MaxMag,并且辅助值相同,我希望更新或插入新值。援助是唯一的主键。假设援助额为100,我尝试了以下方法,但没有成功:
INSERT INTO AssyData
(AID , MaxDef , MaxDefLC , MaxDefNID , Comps , SubAssys)
VALUES( 100 , 101 , 202 , 203 , "" , "")
ON CONFLICT(AID)
DO UPDATE
SET
MaxDef = excluded.MaxDef ,
MaxDefNID = excluded.MaxDefNID ,
MaxDefLC = excluded.MaxDefLC ,
Comps = excluded.Comps ,
SubAssys = excluded.SubAssys
WHERE excluded.MaxDef > 100
我得到错误“接近”ON:语法错误
我的陈述有什么不对
感谢Shawn的方法。假设您使用的是较新(3.24或更新)版本的sqlite,您可以使用以下内容:
假设您使用的是较新(3.24或更新)版本的sqlite,您可以使用以下内容:
如果您的SQLite版本不允许使用
UPSERT
,您可以通过两个步骤实现所需:
INSERT OR IGNORE INTO AssyData
(AID, MaxDef, MaxDefLC, MaxDefNID, Comps, SubAssys)
VALUES(100, 111, 202, 203, '', '');
如果您尝试插入表中已存在的带有AID
的行,则插入或忽略操作将失败且不会出错。
然后:
更新相关数据
设置
MaxDef=111,
MaxDefLC=202,
MaxDefNID=203,
薪酬=“”,
子通道=“”
其中AID=100,MaxDef<111;
如果要更新的行包含MaxDef
等于或大于值111
,则此操作将失败
请参阅。
通常,在执行此类代码时需要特别小心,因为正如您所看到的,MaxDef
(111
)的值必须设置3次 如果您的SQLite版本不允许使用UPSERT
,您可以通过两个步骤实现所需:
INSERT OR IGNORE INTO AssyData
(AID, MaxDef, MaxDefLC, MaxDefNID, Comps, SubAssys)
VALUES(100, 111, 202, 203, '', '');
如果您尝试插入表中已存在的带有AID
的行,则插入或忽略操作将失败且不会出错。
然后:
更新相关数据
设置
MaxDef=111,
MaxDefLC=202,
MaxDefNID=203,
薪酬=“”,
子通道=“”
其中AID=100,MaxDef<111;
如果要更新的行包含MaxDef
等于或大于值111
,则此操作将失败
请参阅。
通常,在执行此类代码时需要特别小心,因为正如您所看到的,MaxDef
(111
)的值必须设置3次 检查您的SQLite版本。是3.24.0+吗?如果没有,那么就不能使用UPSERT。我只有sqlite 3.7.16.1,这就是错误的原因。谢谢你的提示。检查你的SQLite版本。是3.24.0+吗?如果没有,那么就不能使用UPSERT。我只有sqlite 3.7.16.1,这就是错误的原因。谢谢你的提示。谢谢Shawn,但我只能访问sqlite 3.7.16.1…谢谢Shawn,但我只能访问sqlite 3.7.16.1。。。
UPDATE AssyData
SET
MaxDef = 111,
MaxDefLC = 202,
MaxDefNID = 203,
Comps = '',
SubAssys = ''
WHERE AID = 100 AND MaxDef < 111;