【发布时间】:2014-01-06 15:22:29
【问题描述】:
我正在尝试在我的 C++ 程序中运行 SQLite 查询,以删除我的一个数据库表中的所有重复记录。但是,我不断遇到各种语法错误。
这是我的 SQL 表:
Table Name: spamtrigrams
ID TRIGRAM
---------- ----------
1 Sam's nice ham
2 Tuesday was cold
3 Alex stood up
4 Mark passed out
5 this database is
6 date with a
7 disco stew pot
++10000
这是我的 C++ 代码:
sql = "DELETE from spamtrigrams WHERE id in(" \
"SELECT id from spamtrigrams" \
"EXCEPT(SELECT min(id);" \
"from spamtrigrams," \
"group by TRIGRAM," \
"having count(1) > 1," \
"union all," \
"SELECT min(id)," \
"from spamtrigrams," \
"group by TRIGRAM," \
"having count(1) = 1));";
ret = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
if (ret != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
else {
fprintf(stdout, "Duplicates Deleted\n");
有人能告诉我为什么会出现这个错误吗?
谢谢。
【问题讨论】:
-
您知道您的
if中缺少}。不过,这不是您的错误:只是发布错字。 -
认真的吗?需要我们为您计算括号吗?
-
括号的数量似乎匹配,但我认为逗号有很多。也许 SQLite 不同,但 IIRC,FROM、GROUP 或 HAVING 之前通常没有逗号。哦,还有“;”第三行之后肯定是错的。
-
这与 C++ 无关。 only 用 SQL 来提问,因为这是一个查询语法错误。