1

有没有办法像这样查询用户表:

| id | username |
-----------------
| 1  | user1    |
| 2  | user2    |
| 3  | user3    |

和 user_roles 表:

| id_user | id_role |
---------------------
|    1    |    1    |
|    1    |    2    |
|    1    |    3    |
|    2    |    2    |
|    3    |    1    |

假设 id = 1 的角色是管理员角色,生成如下所示的结果:

| id | username | admin |
-------------------------
| 1  | user1    |   Y   |
| 2  | user2    |   N   |
| 3  | user3    |   Y   |

我认为可以使用嵌套的 SELECT 语句来完成,但我想知道使用 JOIN 是否可行。

编辑:管理员列值不必是 Y 或 N,它可以是管理员角色 id (1) 或 NULL 或任何让我知道用户是否是管理员的值

4

3 回答 3

1

好吧,您可以像这样加入,这将为您提供id_role结果。

SELECT u.*, r.id_role
FROM users u
LEFT JOIN user_roles r
ON u.id=r.id_user

您可以添加WHERE r.id_role=1以获取管理员等。

但是要根据需要将管理员设置为“Y”或“N”,您可以使用IFid_role 是否为 1。

SELECT u.*, IF(r.id_role = 1, "Y", "N") as admin
FROM users u
LEFT JOIN user_roles r
ON u.id=r.id_user
于 2010-01-14T12:18:45.917 回答
1

我会试试这个:

select u.id, u.username, if (id_role is null,  'N', 'Y') as is_admin
  from users u
  left outer join user_roles r
    on u.id = r.id_user and r.id_role = 1

但我不是 100% 确定。

于 2010-01-14T12:22:15.007 回答
0
select u.id_user, if(count(1) > 0, 'Y', 'N')
from user u left outer join user_roles ur on u.user_id = ur.user_roles
where ur.id_role=1
group by u.id_user

我没有使用 mysql,所以只是用谷歌搜索它有 'if' 功能,如果那是错误的,请用 DECODE、COALESCE 或类似方法替换。

于 2010-01-14T12:25:53.017 回答