我有一个带有 _id,name 的表。我使用 SQLite3 查询来获取给定 id 的名称,如以下 api。
getName(id) >> Query "select name from table where _id=id"
以及用于 ID 数组的另一个方便的 API,返回的行(名称)必须与请求的 ID 的顺序匹配。
getNames(ids) >>
/* Returned text must be ordered */
var ordClause='ORDER BY CASE _id';
for(var i=1;i<=ids.length;i++){ ordClause += ' WHEN '+ids[i-1]+' THEN '+i; }
ordClause += ' END';
Query "select name from table where _id in( "+ids+" ) "+ordClause
当给定的 ids
具有重复值时,就会出现此问题。冗余 id 仅映射到第一个 id。因此,返回的行可能少于请求的 ID。
我怎样才能解决这个问题?
最佳答案
SELECT 查询返回与 WHERE 子句中的过滤器匹配的任何行。 IN 集中的冗余 ID 不会改变单行与该过滤器匹配的事实。
如果您确实想要重复的行,则必须为每个行编写单独的查询:
SELECT name FROM MyTable WHERE ID = 7
UNION ALL
SELECT name FROM MyTable WHERE ID = 8
UNION ALL
SELECT name FROM MyTable WHERE ID = 8
UNION ALL
SELECT name FROM MyTable WHERE ID = 7
UNION ALL
SELECT name FROM MyTable WHERE ID = 1;
关于javascript - 返回重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35363077/