我roles在Userstype表中有一个字段Array。我需要能够同时拥有角色“ admin”和角色“ member”的所有用户。现在我使用以下查询:
select * from users where 'member' = ANY(roles) and 'admin' = ANY(roles);
我想知道是否有一种更清洁的方法来做到这一点。
使用数组包含的运算符@<:
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[],因为数组类型之间没有隐式强制转换。
| 归档时间: |
|
| 查看次数: |
1065 次 |
| 最近记录: |