Задача
Нужно выбрать пользователей которые не имеют роли с номерами 3, 30,29
У одного пользователя может быть несколько ролей
Решил эту задачу вот так:
CODE ( SQL):
скопировать код в буфер обмена
SELECT DISTINCT u.uid, u.mail, pv1.value AS profile_last_name FROM users u LEFT JOIN profile_values pv1 ON pv1.uid = u.uid AND pv1.fid = 27 WHERE u.STATUS = 1 AND u.uid NOT IN (SELECT DISTINCT uid FROM users_roles WHERE rid IN (29, 3, 30) )
выполнил explain
есть ли какой то вариант решения этой задачи, поскольку NOT IN в таком случае не использует индексы Прикреплено изображение (Нажмите для увеличения)
(Отредактировано автором: 02 Декабря, 2013 - 13:51:06)
|