限制查询仅适用于ID列表

时间:2015-04-26 23:00:05

标签: sql arrays matlab postgresql

我在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]

有什么想法吗?

1 个答案:

答案 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);