首页 > 解决方案 > sqflite IN 运算符与 AND 运算符

问题描述

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

错误

(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]);

标签: flutterdartsqflite

解决方案


如果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 value from employee  WHERE employeename = ? AND id NOT IN ('123','444') 
ORDER BY timestamp DESC.

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

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


推荐阅读