我有使用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);
,这是可行的。它正确显示了两个实体。我的问题是为什么上面的Sqlite SELECT IN
查询不能正常工作,我应该如何在params中正确添加许多值(值1和3的数组位于何处)?我使用它(SELECT IN查询)错了吗?
当我使用以下参数进行上述查询时:
[1]
->有效[[1]]
->有效[[1, 3]]
->不起作用[1, 3]
->错误很明显答案 0 :(得分:0)
我发现了两种解决方法:
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
});
SELECT
查询中使用sql SELECT IN
(如果您可以从数据库表中获取这些值,则是一个很好的解决方案):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
});