1

我有一个better-sqlite3对我的数据库进行排序和排名的语句,我有一个IN语句,所以我可以选择多于 1 行。这就是我遇到问题的地方,我需要根据动态 ID 数组获取多行。

我的 SQLITE 语句如下所示:

Table.prepare('SELECT *, RANK () OVER (ORDER BY amount DESC) rank FROM table WHERE user IN(?)');

我试图从这个陈述中得到这样的东西:

getAll.get(['1','2','3']);
getAll.get('6,9,4');
getAll.get('7','5','8');

我收到一个错误:

RangeError: Too many parameter values were provided

在不知道数组长度的情况下如何准确地选择多个值(所以?,?不会削减它),并允许尽可能多的值?我用过?*,我得到一个语法错误。

我正在better-sqlite3使用Node.JS

4

1 回答 1

0

而不是IN使用运算符LIKE

SELECT *, RANK () OVER (ORDER BY amount DESC) rank 
FROM table 
WHERE ',' || ? || ',' LIKE '%,' || user || ',%'

并将列表作为 1 个逗号分隔值字符串(不带空格)传递:

all('6,9,4');
于 2020-08-15T20:27:01.617 回答