Привет всем, можно ли запрос переписать:
select userid from User where userid not in(select userid from UserRole where roleid in(8));
как присоединиться?
проблема в том, что у одного пользователя может быть несколько ролей заранее спасибо.
mysql> desc User; +--------------------+-------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+-------------------+------+-----+---------+----------------+ | userId | int(11) | NO | PRI | NULL | auto_increment | | userName | varchar(50) | YES | | NULL | |
... и другие столбцы, связанные с пользователем
mysql> desc UserRole; +--------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+---------+------+-----+---------+-------+ | userId | int(11) | NO | PRI | 0 | | | roleId | int(11) | NO | PRI | 0 | | +--------+---------+------+-----+---------+-------+






Может это сработает?
select userid from User
left outer join
(select userid, roleid from UserRole where roleid in(8)) v
on User.userid = v.userid
where roleid is null;
@ShivanRaptor: (а) OP не указал подзапрос, просто «могу ли я переписать как соединение»; (b) OP принял мой ответ, так что, по-видимому, доволен им; (в) все это произошло почти 4 года назад! ;-)
Я думаю, это должно помочь вам всем, у кого есть Роль, отличная от 8
select userid from User
where not exists
(select UserId from UserRole
where UserRole.userid = User.userid and roleid not in(8) )
Если вы хотите повысить удобочитаемость, вы можете использовать предложение EXCEPT.
Т.е.
select userId from user
except
select userId from UserRole where roleId <> 8
Не уверен, что MySQL поддерживает "Except".
Примечание: MySQL НЕ поддерживает EXCEPT.
Я не тестировал это, но думаю, что это работает.
select userID from user
left join UserRole
on user.userID = UserRole.userID
and UserRole.roleID = 8
where UserRole.roleID IS NULL
Примечание: можно использовать псевдоним таблицы
OP хочет переписать подзапрос как соединение, но в этом запросе все еще есть подзапрос.