如果不存在,如何插入,如果存在,如何增加? [英] How to insert if not exists, or increase if exists in SQLite?
本文介绍了如果不存在,如何插入,如果存在,如何增加?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有下表:
CREATE TABLE 'Test' ('Id' INTEGER PRIMARY KEY NOT NULL, 'Val' INTEGER)
如果给定的ID不存在,我想插入具有默认Val的ID.但是,如果它已经存在,我想增加Val的值.
If a given Id doesn't exist, I want to insert the Id with a default Val. But if it already exists, I want to increase the value of Val.
我有此代码:
$data = array(':id'=>$id);
$stmt = $db->prepare('INSERT INTO Test (Id, Val) Values(:id, 1);');
if(!$stmt->execute($data)){
$stmt = $db->prepare('UPDATE Test SET Val=Val+1 WHERE Id=:id');
$stmt->execute($data);
}
,它可以工作,但是我想用一个SQL语句来完成.我可以吗?
and it works, but I would want to do it with a single SQL statement. Can I?
编辑:
根据@ Xikinho90的回答,我的最终代码是
From @Xikinho90's answer, my final code is
$stmt = $db->prepare('
INSERT OR REPLACE INTO Test (Id,Val)
VALUES ( :id, COALESCE((SELECT Val + 1 FROM Test WHERE id = :id), 1) )
');
$stmt->execute(array(':id'=>$id));
推荐答案
您可以使用插入或替换.
You can use insert or replace.
我认为这可以解决问题
INSERT OR REPLACE INTO Test (Id,Val)
VALUES ( 1,
COALESCE((SELECT Val + 1 FROM Test WHERE id = 1), 1)
);
INSERT OR REPLACE INTO Test (Id,Val)
VALUES ( 2,
COALESCE((SELECT Val + 1 FROM Test WHERE id = 2), 1)
);
您只需要用输入的ID替换数字
You just have to replace the numbers with your inputed id
谢谢 奇科
这篇关于如果不存在,如何插入,如果存在,如何增加?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文