LINUX.ORG.RU

История изменений

Исправление slovazap, (текущая версия) :

Например, как-то так, подзапросом:

SELECT
  *,
  EXISTS(SELECT * FROM UserRoles INNER JOIN Roles USING(RoleId) WHERE RoleName = 'Owner' AND UserRoles.UserId = Users.UserId) AS IsOwner
FROM Users;

Джойнами:

SELECT
  UserId, UserName, coalesce(bool_or(RoleName = 'Owner'), false) AS IsOwner
FROM Users
LEFT OUTER JOIN UserRoles USING(UserId)
LEFT OUTER JOIN Roles USING(RoleId)
GROUP BY UserId, UserName;

Либо сделать нормальную структуру БД с enum типом ролей, и массовом ролей для пользователя вместо промежуточных таблиц.

Исходная версия slovazap, :

Например, как-то так, подзапросом:

SELECT
  *,
  EXISTS(SELECT * FROM UserRoles INNER JOIN Roles USING(RoleId) WHERE RoleName = 'Owner' AND UserRoles.UserId = Users.UserId) AS IsOwner
FROM Users;

Джойнами:

SELECT
  UserId, UserName, bool_or(RoleName = 'Owner') AS IsOwner
FROM Users
LEFT OUTER JOIN UserRoles USING(UserId)
LEFT OUTER JOIN Roles USING(RoleId)
GROUP BY UserId, UserName;

Либо сделать нормальную структуру БД с enum типом ролей, и массовом ролей для пользователя вместо промежуточных таблиц.