我似乎无法让我的UPDATE语句工作,尽管我阅读了所有内容,但我一直无法找到解决方案。我正在使用OS X Yosemite(10.11.1)和SQLite 3.8.10.2。
我只想更新数据库的前N行。
数据库的结构如下:
ID | COL1 | COL2 | COL3
我最初的尝试是:
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE * LIMIT 15;
但是我收到以下错误:
Error: near "*": syntax error
但是,如果我这样做:
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE *;
整个数据库更新,正如我所料。
我还尝试过以下方法:
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" LIMIT 15;
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE ID > 0 LIMIT 15;
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE * LIMIT 15 OFFSET 0;
我能说的最好,有一个我可以使用限制的细节。有人能解释一下这个问题吗?
修改:
看起来我的SQLite版本没有使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT
选项集进行编译。
编辑2 :
请参阅原始编辑,了解我遇到此问题的原因。我能够使用以下代码来实现相同的效果:
UPDATE TESTTABLE SET COL1="7", COL2="7", COL3="UPDATE" WHERE ID IN (SELECT ID FROM TESTTABLE LIMIT 15);
答案 0 :(得分:1)
sqllite documentation表示必须使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT
进行编译才能支持Limit
使用Update
您正在使用LIMIT
而未指定ORDER BY
。即使您依赖主键,仍应指定Order子句。