有一种方法以查询用户表是这样的:

| 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或任何可以让我知道,如果用户是管理员

有帮助吗?

解决方案

我想尝试这样的:

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%肯定。

其他提示

好了,你可以加入这样的,它会给你的结果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”为你想要的,你可以在id_role是否为1或不使用的IF

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
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,所以就用Google搜索它有“如果”的功能,如果说的不对,用DECODE更换,COALESCE或类似。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top