我有一个带有_id的表,名字。我使用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。
我怎么可能解决这个问题?
答案 0 :(得分:1)
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;