Получить роли, которые еще не назначены на запрос участника

0

Как я могу запросить базу данных MySQL для возврата ролей, которые все еще не назначены (как доступно для него).

С таблицей user_roles:

|user_id|role_id|
|   1   |   1   |
|   1   |   2   | 
|   1   |   4   |
|   1   |   7   |

Как я могу запросить таблицу ролей, чтобы вернуть имя роли и идентификатор всех ролей, которые не назначены. role_id: 3,5,8,...

Теги:
roles

3 ответа

2
Лучший ответ

Попробуйте

SELECT *
FROM roles r
WHERE NOT EXISTS (
   SELECT 1
   FROM user_roles ur
   WHERE ur.role_id = r.id
   AND ur.user_id = 1
)
  • 0
    Спасибо! Очень признателен
1

Я предпочитаю делать такой запрос набора-дополнений, используя внешнее соединение, вместо коррелированных или некоррелированных подзапросов.

SELECT r.id
FROM roles r
LEFT OUTER JOIN user_roles u 
  ON r.id = u.role_id AND u.user_id = 1
WHERE u.role_id IS NULL;
0
SELECT * 
FROM roles 
WHERE roles.id NOT IN (SELECT distinct role_id FROM user_roles)

если вам нужны роли, не назначенные пользователю 1.

SELECT * 
FROM roles 
WHERE roles.id NOT IN (SELECT distinct role_id FROM user_roles WHERE NOT user_ID = 1)

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

  • 0
    Это возвращает только роли, которые никому не назначены
  • 0
    Это то, что вы просили. «Как я могу запросить таблицу ролей для получения имени роли и идентификатора всех ролей, которые не назначены».
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню