我有一个包含3列的sql表,其中没有一列是UNIQUE(但是对名称+角色是):
Name | Role | Votes
我需要做的是,写一个坚持以下规则的sqllite查询:
我已经调查了INSERT OR REPLACE和this很棒的帖子,但它似乎对我帮助不大,我甚至不确定INSERT OR REPLACE是否可行,因为像< / p>
INSERT OR REPLACE INTO words (name,role,votes)
VALUES ('foo','bar', coalesce((
select votes from words where name = 'foo' and role='bar'),0)+1)
始终坚持并永不替换
答案 0 :(得分:1)
您只需在2列上创建唯一索引即可:
CREATE UNIQUE INDEX words_name_role_idx ON words (name,role)
请注意,您不为任何单个列创建唯一索引,而是为整个2组合创建唯一索引。
之后,您的REPLACE INTO
语句应该开始正常运行:
REPLACE INTO words (name,role,votes) VALUES ('foo','bar',
coalesce((
SELECT votes FROM words
WHERE name = 'foo' AND role='bar'),0
)+1
)
(请注意,我已将counter
更改为上面的votes
。
答案 1 :(得分:0)
此查询将使用+1更新您的记录。
update todo set text='raj',complete='raj',pk=((SELECT pk FROM todo where text='raj' and complete='raj')+1) where (SELECT pk FROM todo where text='raj' and complete='raj')
编辑您的查询
update words set name='foo',role='bar', votes =((SELECT votes FROM words where name='foo' and role='bar')+1) where (SELECT votes FROM words where name='foo' and role='bar')
如果此条件不成立,则进行插入查询。