我在Matlab工作。我有一个函数,它目前查询单个表。
现在我需要将查询限制为仅对整个表的子集起作用。我希望查询只考虑保存在单元格数组中的id&id; idlist'。
idlist = 1, 5, 10, 12, 20
查询如下所示:
SELECT musickey FROM musiccollection WHERE path = 'Users/Jur/abcdef.mp3'
我希望上面的查询只考虑在idlist
中找到id的记录。请注意,idlist
可以是任意大小。此外,由于我在Matlab工作,我必须使用该实例的idlist
生成一个新的查询字符串。因此,在AND
中添加WHERE
对我来说无效。
我需要这样的东西:
SELECT musickey FROM musiccollection
WHERE path = 'Users/Jur/abcdef.mp3'CONSIDER id = [idlist]
有什么想法吗?
答案 0 :(得分:1)
有各种方法。 长 列表简单快捷:
SELECT musickey
FROM musiccollection
JOIN unnest ('{1,5,10,12,20}'::int[]) id USING (id)
WHERE path = 'Users/Jur/abcdef.mp3';
提供idlist
作为array of integer
。
或者,如果在text
值中提供逗号分隔列表更方便:
SELECT musickey
FROM musiccollection
JOIN unnest(string_to_array('1,5,10,12,20', ',')::int[]) id USING (id)
WHERE path = 'Users/Jur/abcdef.mp3';
或 简短 数组:
SELECT musickey
FROM musiccollection
WHERE path = 'Users/Jur/abcdef.mp3'
AND id = ANY ('{1,5,10,12,20}'::int[]);
或简短列表:
...
AND id IN (1,5,10,12,20);