查询数组字段中的多个值

Chr*_*n-G 1 postgresql

rolesUserstype表中有一个字段Array。我需要能够同时拥有角色“ admin”和角色“ member”的所有用户。现在我使用以下查询:

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

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

Cra*_*ger 5

使用数组包含的运算符@<

select * from users where ARRAY['member','admin']::varchar[] <@ roles;
Run Code Online (Sandbox Code Playgroud)

这也可以让您索引查询。

(根据@bereal进行更正;我误解了问题)

或者,如果您意味着它们必须同时拥有两种权利,请使用array-overlaps &&

select * from users where ARRAY['member','admin']::varchar[] && roles;
Run Code Online (Sandbox Code Playgroud)

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