查询多个值的数组字段

时间:2014-07-16 10:38:54

标签: postgresql

我在rolesUsers表中有一个Array字段。我需要能够让所有同时拥有“admin”角色和“角色”成员的用户。现在我使用这个查询:

select * from users where 'member' = ANY(roles) and 'admin' = ANY(roles);

我想知道是否有更清洁的方法来做到这一点。

1 个答案:

答案 0 :(得分:3)

使用array-contained-by运算符@<

select * from users where ARRAY['member','admin']::varchar[] <@ roles;

也可以让您为查找编制索引。

(@bereal的修正;我误读了这个问题)

或者,如果您的意思是他们必须拥有这两项权利,请使用数组重叠&&

select * from users where ARRAY['member','admin']::varchar[] && roles;

此外,由于您的输入结果为varchar[](您没有显示您的表定义),您必须将数组输入转换为varchar[],因为那里有数组类型之间没有隐式转换。