我在一个表中包含按位标志的字段.假设为例,有三个标志:4 =>读,2 =>写,1 =>执行和表看起来像这样*:
user_id | file | permissions -----------+--------+--------------- 1 | a.txt | 6 ( <-- 6 = 4 + 2 = read + write) 1 | b.txt | 4 ( <-- 4 = 4 = read) 2 | a.txt | 4 2 | c.exe | 1 ( <-- 1 = execute)
我有兴趣在任何记录上找到具有特定标志位(例如:写入)的所有用户.为了在一个查询中做到这一点,我认为如果你把所有的用户权限在一起,你会得到一个单一的值,这是他们的权限的“总和”:
user_id | all_perms -----------+------------- 1 | 6 (<-- 6 | 4 = 6) 2 | 5 (<-- 4 | 1 = 5)
有一种方法可以在一个语句中执行此操作吗?我看到它的方式,它与GROUP BY的正常聚合函数非常相似:
SELECT user_id,SUM(permissions) as all_perms FROM permissions GROUP BY user_id
…但显然,一些神奇的“按位或”功能而不是SUM.任何人都知道这样的事情?
(和奖励积分,它在oracle工作吗?)
解决方法
MysqL的:
SELECT user_id,BIT_OR(permissions) as all_perms FROM permissions GROUP BY user_id