【问题标题】:How to insert if not exists, or increase if exists in SQLite?SQLite中不存在如何插入,如果存在则增加?
【发布时间】:2013-07-23 06:56:15
【问题描述】:

我有下表:

CREATE TABLE 'Test' ('Id' INTEGER PRIMARY KEY NOT NULL, 'Val' INTEGER)

如果给定的 Id 不存在,我想插入具有默认 Val 的 Id。但是如果它已经存在,我想增加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 语句来完成。可以吗?

编辑:

来自@Xikinho90 的回答,我的最终代码是

$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));

【问题讨论】:

    标签: sql sqlite pdo insert increment


    【解决方案1】:

    您可以使用插入或替换。

    我认为这可以解决问题

    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

    谢谢 奇科

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 2021-10-14
      • 2015-03-31
      • 2011-01-13
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2013-10-20
      相关资源
      最近更新 更多