如果不存在则如何插入,或者如果存在于SQLite中则增加?

时间:2013-07-24 00:17:58

标签: sql sqlite pdo insert increment

我有下表:

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

1 个答案:

答案 0 :(得分:2)

您可以使用插入或替换。

我认为这会解决问题

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

您只需将数字替换为输入的内容

即可

由于 奇科