2013-04-27 65 views
1

我有一個SQLite表這樣定義的: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( 「點」, 「值= 1,播放器= 3,匹配= 3」,NULL);將刪除所有匹配where子句的列,對嗎?

+0

「LIMIT 1」怎麼樣? – 2013-04-27 09:59:20

+0

不知道這個說法。我會試着看看它是否有效。非常感謝你! – user1897262 2013-04-27 10:05:19

回答

1

你寫的確實會刪除所有匹配行DELETE語句。 嘗試使用內置列ROWID,讀取第一行,保存rowid,然後刪除ROWID =您選擇的值。

+0

我曾考慮過這個問題,但我預計會有一個「更容易」的方式或SQL語句來做到這一點。謝謝你的答案。 – user1897262 2013-04-27 10:17:27

+0

與LIMIT 1子句(未在SQLite中啓用)戰鬥後,我正在嘗試這種方式。 – user1897262 2013-04-27 10:46:13

0

試試這個

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

db.delete(TABLE_NAME,"value=? AND player=? AND match=?",new String[] {_val,_player,_match}); 
+0

這不會刪除value = 1,player = 3和match = 3的所有列嗎? – user1897262 2013-04-27 10:07:31

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 )