首页 > 解决方案 > 离子 Sqlite SELECT IN 语句不返回正确的结果

问题描述

我有使用 Sqlite 插件的离子移动应用程序。我尝试运行以下查询:

this.db.executeSql('SELECT * FROM foo_table WHERE id IN (?)', [[1, 3]])
    .then(data => {
        console.log(data.rows.item(0));
        console.log(data.rows.item(1));
        // Do something here
    });

我故意留下显示数据库初始化代码,因为它是不必要的,因为它可以与同一文件中的其他方法一起正常工作。在数据库中,我在table_foo中有两个实体,它们包含一些特定的数据,每个实体都有 id。

当我运行上面的语句时,它不会返回 id 为 1 和 3 的这两个实体。而是返回undefined. 我在 sqlite 控制台中运行完全相同的语句,这是可行的SELECT * FROM table_a WHERE id IN (1,3);。它正确显示了这两个实体。我的问题是为什么SELECT IN上面的 Sqlite 查询不能正常工作以及我应该如何在 params 中正确添加许多值(值 1 和 3 的数组位于哪里)?我使用它(SELECT IN 查询)错了吗?

当我使用参数运行上述查询时:

标签: sqliteionic-frameworkionic4

解决方案


我为此找到了两种解决方法:

  1. 将数组值连接为字符串(不是好的解决方案):
const ids = [1, 3];
this.db.executeSql('SELECT * FROM foo_table WHERE id IN (' + ids.toString()')', [])
    .then(data => {
        console.log(data.rows.item(0));
        console.log(data.rows.item(1));
        // Do something here
    });
  1. SELECTSELECT IN查询中使用 sql (如果您可以从数据库表中获取这些值,这是一个很好的解决方案):
this.db.executeSql('SELECT * FROM foo_table_a WHERE id IN (SELECT id FROM foo_table_b)', [])
    .then(data => {
        console.log(data.rows.item(0));
        console.log(data.rows.item(1));
        // Do something here
    });

推荐阅读