String ALTER_TBL ="delete from " + MYDATABASE_TABLE +
" where "+KEY_ID+" in (select "+ KEY_ID +" from "+ MYDATABASE_TABLE+" order by _id LIMIT 3);";
- 有SQLite中沒有「前3名」命令,我知道的,你必須添加一個極限
- 注意空格,當您添加字符串連接在一起:
"delete from" + TABLE + "where" = "delete frommytablewhere"
該方法使用兩個步驟刪除前N行。
查找所述第一N行:
SELECT id_column FROM table_name ORDER BY id_column LIMIT 3
結果是表示第一N ID的列表(此處:3)行。 ORDER BY
部分很重要,因爲SQLite不保證沒有該子句的任何次序。沒有ORDER BY
該聲明可能會刪除3個隨機行。
從ID列表相匹配的表中刪除任何行:
DELETE FROM table_name WHERE id_column IN ({Result of step 1})
如果結果從第1步是空的什麼都不會發生,如果有小於N行只是這些會刪除。
請務必注意,id_column
必須是唯一的,否則超過預期的行將被刪除。如果用於訂購的列不是唯一的,則可以將整個說明更改爲DELETE FROM table_name WHERE unique_column IN (SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3)
。提示:在表上刪除時,SQLite的ROWID
是unique_column
的好選擇(在視圖上刪除時可能不起作用 - 這裏不確定)。
要刪除最後 N行的排序順序必須被反轉以降序(DESC
):
DELETE FROM table_name WHERE unique_column IN (
SELECT unique_column FROM table_name ORDER BY sort_column DESC LIMIT 3
)
要刪除的N個第至M 第行LIMIT
子句可以擴展OFFSET
。下面的實施例將跳過該第一2行和返回/刪除下一3.
SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3 OFFSET 2
設置LIMIT
爲負值(例如LIMIT -1 OFFSET 2
)將返回所有行除了前2導致的一切,但前兩排的缺失 - 這也可以通過直接在轉動SELECT .. WHERE .. IN()
到SELECT .. WHERE .. NOT IN()
的SQLite有option,使ORDER BY x LIMIT n
部分完成DELETE
聲明沒有子查詢。該選項沒有在Android啓用,並且不能被激活,但是這可能會感興趣的使用在其他系統上的SQLite人:
DELETE FROM table_name ORDER BY sort_column LIMIT 3
您不能使用delete語句在單個查詢select語句。 – Lucifer 2012-03-21 07:48:46
@Lucifer其實你可以。但是你不能在選擇內部進行刪除。請參閱http://www.sqlite.org/lang_expr.html表達式是您可以放在「where」之後的部分。 – zapl 2012-03-21 08:14:36