带有 AND 运算符的 sqflite IN 运算符
sqflite IN operator with AND operator
我有以下查询,其中 select 来自员工 table,其中姓名为 "max",ID 不在 123 和 444 中。
不在 IDs 中可以在未来增长。但是我收到错误
错误
( 8023): [错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常: DatabaseException(靠近“?”: 语法错误 (代码 1 SQLITE_ERROR): , 编译时:
查询
List<String> a = [];
a.add("123");
a.add("444");
var table = await mydb.rawQuery(
"SELECT value from employee WHERE employeename = ? AND id NOT IN ? ORDER BY timestamp DESC",
["max", a]);
如果 LIST
不可预测,一种方法是您可以使用 JOIN
创建 select 语句,所需值为 NOT IN
。下面是一个示例。
void main() {
List<String> a = [];
a.add("123");
a.add("444");
var select =
'SELECT value from employee WHERE employeename = ? AND id NOT IN (\'' +
(a.join('\',\'')).toString() +
'\') ORDER BY timestamp DESC';
var table = await mydb.rawQuery(select, ["max"]);
}
如果你打印变量 select 你会得到
SELECT value from employee WHERE employeename = ? AND id NOT IN ('123','444')
ORDER BY timestamp DESC.
然后你可以将上面的语句传递给rawquery
并得到你的结果。
P.S:相应地使用你的单引号和双引号。
我会选择@arun-palanisamy 的解决方案,请参阅 。道具交给他。我刚刚尝试了以下 - Groovy/Postgres,但错误似乎是一样的,所以你可能想试一试:
String[] a = ['123', '444']
// your code, throws 'ERROR: syntax error at or near ""':
// def table = sql.execute("SELECT value from employee WHERE employeename = ? AND id NOT IN ? ORDER BY timestamp DESC", ["max", a])
// code of arun-palanisamy, compiles:
def table = sql.execute("SELECT value from employee WHERE employeename = ? AND id NOT IN (${a.join(', ')}) ORDER BY timestamp DESC", ["max", a])
旁注:
- 您可能想为
a
尝试不同的类型,例如我的代码中的 Array,甚至是 HashMap。
- 有些示例(如 here)动态生成
?
的数量。
更新:前往,我们同时发布
我有以下查询,其中 select 来自员工 table,其中姓名为 "max",ID 不在 123 和 444 中。 不在 IDs 中可以在未来增长。但是我收到错误
错误
( 8023): [错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常: DatabaseException(靠近“?”: 语法错误 (代码 1 SQLITE_ERROR): , 编译时:
查询
List<String> a = [];
a.add("123");
a.add("444");
var table = await mydb.rawQuery(
"SELECT value from employee WHERE employeename = ? AND id NOT IN ? ORDER BY timestamp DESC",
["max", a]);
如果 LIST
不可预测,一种方法是您可以使用 JOIN
创建 select 语句,所需值为 NOT IN
。下面是一个示例。
void main() {
List<String> a = [];
a.add("123");
a.add("444");
var select =
'SELECT value from employee WHERE employeename = ? AND id NOT IN (\'' +
(a.join('\',\'')).toString() +
'\') ORDER BY timestamp DESC';
var table = await mydb.rawQuery(select, ["max"]);
}
如果你打印变量 select 你会得到
SELECT value from employee WHERE employeename = ? AND id NOT IN ('123','444')
ORDER BY timestamp DESC.
然后你可以将上面的语句传递给rawquery
并得到你的结果。
P.S:相应地使用你的单引号和双引号。
我会选择@arun-palanisamy 的解决方案,请参阅
String[] a = ['123', '444']
// your code, throws 'ERROR: syntax error at or near ""':
// def table = sql.execute("SELECT value from employee WHERE employeename = ? AND id NOT IN ? ORDER BY timestamp DESC", ["max", a])
// code of arun-palanisamy, compiles:
def table = sql.execute("SELECT value from employee WHERE employeename = ? AND id NOT IN (${a.join(', ')}) ORDER BY timestamp DESC", ["max", a])
旁注:
- 您可能想为
a
尝试不同的类型,例如我的代码中的 Array,甚至是 HashMap。 - 有些示例(如 here)动态生成
?
的数量。
更新:前往