2

我有一个这样定义的 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 子句匹配的所有列,对吗?

4

3 回答 3

1

您编写的删除语句确实会删除所有匹配的行。尝试使用内置列 ROWID,读取第一行,保存 rowid,然后删除 where ROWID= 您选择的值。

于 2013-04-27T10:11:26.083 回答
0

Try this

String _val=""+1;
String _player=""+3;
String _match=""+3;

db.delete(TABLE_NAME,"value=? AND player=? AND match=?",new String[]  {_val,_player,_match});
于 2013-04-27T10:03:38.797 回答
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 最低)

于 2015-03-12T19:24:22.597 回答