我有一个以这种方式定义的SQLite表:
CREATE TABLE Points(value INTEGER, player INTEGER, match INTEGER)
在执行中,我可能有几个相同的列,我想要一个只删除一个,而不是全部,也只保留一个的调用。有没有SQL调用呢?
一个解释自己更清楚的例子:
value player match
1 2 3
1 3 3
1 2 3
2 2 3
1 2 3
1 2 3
1 3 3
db.delete("Points", "value = 1, player = 2, match = 3", null); //pseudo-code for the deletion
db.delete("Points", "value = 1, player = 3, match = 3", null);
value player match
1 2 3
2 2 3
1 2 3
1 2 3
1 3 3
我认为db.delete(“Points”,“value = 1,player = 3,match = 3”,null);将删除与where子句匹配的所有列,对不对?
答案 0 :(得分:1)
您编写的删除语句确实会删除所有匹配的行。 尝试使用内置列ROWID,读取第一行,保存rowid,然后删除ROWID =您选择的值的位置。
答案 1 :(得分:0)
试试这个
String _val=""+1;
String _player=""+3;
String _match=""+3;
db.delete(TABLE_NAME,"value=? AND player=? AND match=?",new String[] {_val,_player,_match});
答案 2 :(得分:0)
执行此操作的常用方法是为每个表分配每行的唯一标识符。像这样:
CREATE TABLE Points(Id INTEGER PRIMARY KEY, value INTEGER, player INTEGER, match INTEGER);
然后,您可以使用子查询来查找要删除的行:
DELETE FROM Points WHERE Id =(SELECT MIN(Id) FROM Points WHERE value=1 AND player=2 and match=3);
此示例删除最先输入的最旧记录(最旧的记录具有最低的唯一键ID)