MYSQL脚本创建一个MYSQL视图表,以通过多对多关系显示使用id,email和分配的角色名称
我编写了脚本,并加入了表以创建视图表,但是它仅显示其他用户具有角色的其他用户为空的第一条记录的角色名称!
表格
users (id, email)
roles (id, name)
role_users (id, user_id, role_id)
我的脚本
DROP VIEW IF EXISTS users_view;
CREATE VIEW users_view AS
SELECT users.id AS user_id, users.email, roles_names.role_name
FROM users
LEFT JOIN(
SELECT role_users.user_id AS roles_user_id,
role_users.role_id AS roles_role_id
FROM role_users
) AS user_roles ON (roles_user_id = users.id)
LEFT JOIN(
SELECT roles.id AS roleid, roles.name AS role_name
FROM roles
) AS roles_names ON (roleid = user_roles.roles_user_id)
视图创建成功,但仅显示第一个用户的角色名称,其他用户的role_name值为null,尽管他们在role_users表中有记录
答案 0 :(得分:1)
SELECT u.id AS user_id, u.email, IFNULL(u_roles.role_name,'') as role_name
FROM users u
LEFT JOIN
(SELECT GROUP_CONCAT(DISTINCT r.name SEPARATOR ',') as role_name, ur.user_id
FROM roles r INNER JOIN user_roles ur
ON r.id = ur.role_id
GROUP BY ur.user_id) u_roles
ON u.id = u_roles.user_id
由于角色用户将只拥有角色表中的所有角色,因此可以进行角色内部联接和user_roles。
通过此查询,在user_roles表中具有条目的所有记录都将显示角色名称,其余用户将以null
作为角色名称(添加IFNULL
检查以使空值成为空字符串)< / p>