sqflite IN 运算符和 AND 运算符

max*_*ax 3 dart flutter sqflite

我有以下查询从员工表中选择,其中名称为“max”,ID 不在 123 和 444 中。不在 ID 中的将来可以增长。但我收到错误

错误

(8023): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常: DatabaseException(near "?": syntax error (code 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]);
Run Code Online (Sandbox Code Playgroud)

Aru*_*amy 7

如果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"]);
}
Run Code Online (Sandbox Code Playgroud)

如果你打印变量 select 你会得到

SELECT value from employee  WHERE employeename = ? AND id NOT IN ('123','444') 
ORDER BY timestamp DESC.
Run Code Online (Sandbox Code Playgroud)

然后你可以将上面的语句传递给rawquery并得到你的结果。

PS:相应地使用您的单引号和双引号。