MySQL выбирает одно поле в дублированных значениях - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть таблица прав пользователей. Эти права могут быть «Написать» или «Читать». У меня есть SQL-представление, которое объединяет таблицу profile_user и таблицу right_user. Это представление дает мне следующие результаты:

+-------+-----------+---------------+
| email | right     | write_or_read |
+-------+-----------+---------------+
| admin | dashboard | write         |
+-------+-----------+---------------+
| admin | dashboard | read          |
+-------+-----------+---------------+
| admin | log       | read          |
+-------+-----------+---------------+

Как мне написать дубликат записи, чтобы получить только самое важное (право записи). Я хочу написать запрос SQL, который дает мне следующий результат:

+-------+-----------+---------------+
| admin | dashboard | write         |
+-------+-----------+---------------+
| admin | log       | read          |
+-------+-----------+---------------+

Я прочитал этот вопрос , но ответ охватывает только числовое поле id, чтобы получить правильную запись.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2019

В этом случае простое max() работает:

select email, right, max(write_or_read)
from user_rights
group by email, right;
1 голос
/ 05 апреля 2019

Вы можете использовать выражение CASE, чтобы перечислить условия в приоритете.Это работает для более чем двух значений:

SELECT email, right, CASE
    WHEN SUM(write_or_read = 'write') > 0 THEN 'write'
    WHEN SUM(write_or_read = 'read')  > 0 THEN 'read'
    -- more conditions
END AS permission
FROM t
GROUP BY email, right
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...