Czy możliwe jest wykonanie funkcji grupy bitowej?

Mam pole w tabeli, które zawiera flagi bitowe. Powiedzmy na przykład, że są trzy flagi:4 => read, 2 => write, 1 => execute a stół wygląda tak*:

  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)

Jestem zainteresowany znalezieniem wszystkich użytkowników, którzy mają określony zestaw flag (np .: napisz) w DOWOLNYM rekordzie. Aby to zrobić w jednym zapytaniu, doszedłem do wniosku, że gdybyś LUB LUBI wszystkie uprawnienia użytkownika razem, otrzymasz jedną wartość, która jest „sumą całkowitą” ich uprawnień:

  user_id  |  all_perms
-----------+-------------
        1  |  6        (<-- 6 | 4 = 6)
        2  |  5        (<-- 4 | 1 = 5)

*Moja rzeczywista tabela nie dotyczy plików ani uprawnień do plików, ale to tylko przykład

Czy jest jakiś sposób, żeby to zrobić w jednym stwierdzeniu? Sposób, w jaki to widzę, jest bardzo podobny do zwykłej funkcji agregującej z GROUP BY:

SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id

... ale oczywiście, magiczna funkcja "bitwise-or" zamiast SUM. Ktoś wie o czymś takim?

(A dla punktów bonusowych, czy to działa w wyroczni?)

questionAnswers(5)

yourAnswerToTheQuestion