【发布时间】:2013-02-13 10:44:14
【问题描述】:
我有一个包含 3 列的 sql 表,其中没有一个是唯一的(但名称 + 角色对是):
Name | Role | Votes
我需要做的是,编写一个遵守以下规则的 sqllite 查询:
- 如果具有给定名称和角色的行已经存在,则投票是 增加 1
- 如果不是,则使用 Votes = 1 创建一个新行
我已经查看了 INSERT OR REPLACE 和 this 很棒的帖子,但它似乎对我没有太大帮助,而且我什至不确定 INSERT OR REPLACE 是一个可行的选择,因为类似
INSERT OR REPLACE INTO words (name,role,votes)
VALUES ('foo','bar', coalesce((
select votes from words where name = 'foo' and role='bar'),0)+1)
总是插入,从不替换
【问题讨论】:
-
这不是重复的,因为我的列都不是唯一的或可以这样设置
-
你只需要添加复合唯一列
CONSTRAINT tb_UQ UNIQUE (Name, RoleID),我给你的链接就可以了。 -
你是对的 :) 无论如何,我认为我发布的查询,一旦将约束添加到表中,比你链接的那个更好,不是吗?
-
我想知道您为什么需要获得
counter? -
拿到柜台是什么意思?你想知道那张桌子是干什么用的,或者选择的原因?