使用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;