SQLite - 如果存在则更新(不替换),否则插入

时间:2013-11-02 20:58:55

标签: sql sqlite case

我正在尝试将数据插入到可能已存在的sqlite数据库中。如果它存在,我想添加它(不替换!)。我不确定该怎么做。

类似的东西(不确定我的语法是否正确)


case
  when exists(select * from Link where word1='%s' and word2='%s')
    then update Link set n = %d + (select n from Link where word1='%s' and word2='%s')
  else
    insert into Link values('%s', '%s', %d)

1 个答案:

答案 0 :(得分:1)

在SQLite中,如果您在桌面上定义了主键,则可以INSERT OR REPLACE而不是普通INSERT。如果表中的另一行已经存在,并且您尝试插入主键,则会被覆盖。

因此,如果您在桌面上制作了由word1word2组成的复合主键,则可以执行以下操作:

INSERT OR REPLACE INTO link (word1, word2, n)
SELECT 
    x.word1, x.word2, x.n + COALESCE(l.n, 0)
FROM ( SELECT '%s' AS word1, '%s' AS word2, %d AS n ) x
LEFT JOIN link l ON x.word1 = l.word1 AND x.word2 = l.word2