mysql - 如何编写 MySQL 查询以获得此结果?

标签 mysql database mysql-5.7

对不起,这个标题很笼统,但我不知道如何用几句话来解释。 我有一个 user_role 表,它是使用数据库/jdbc 在 tomcat 中管理领域的经典结构的一部分。 是这样的:

userid | roleid
user1  | role1
user1  | role2
user2  | role2
user2  | role3

如何在 mysql 中编写查询(如果可能的话)以获得如下结果:

         | role1 | role2 | role3 |   
  user1  |   x   |   x   |       |   
  user2  |       |   x   |   x   |   

提前致谢
干杯
马特奥

最佳答案

从 Sumit 的报价中简化

select 
      ur.userid,
      max( case when ur.roleid = 'role1' then 'X' else ' ' end ) as role1,
      max( case when ur.roleid = 'role2' then 'X' else ' ' end )  as role2,
      max( case when ur.roleid = 'role3' then 'X' else ' ' end ) as role3
   from
      UserRoles ur
   group by
      ur.userid

现在,如果您想要用户的真实姓名并有相应的 USER 表,请加入该表以获取姓名。

select 
      u.userName,
      max( case when ur.roleid = 'role1' then 'X' else ' ' end ) as role1,
      max( case when ur.roleid = 'role2' then 'X' else ' ' end )  as role2,
      max( case when ur.roleid = 'role3' then 'X' else ' ' end ) as role3
   from
      UserRoles ur
         JOIN Users u
            on ur.userid = u.userid
   group by
      ur.userid

关于mysql - 如何编写 MySQL 查询以获得此结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201330/

相关文章:

python - 如何使用 SQLAlchemy 将一个类映射到多个表?

mysql - DBeaver 数据格式化 - 巴西

Mysql 5.7.20 : Cannot create a JSON value from a string with CHARACTER SET 'binary'

php - 更新 SQL 日期字段以添加一周但保持相同时间

mysql - 搜索 1000 篇文章,共包含 300.000 个单词

PHP Laravel 使用两个表进行多文件上传

mysql 不区分大小写的问题,即使使用 COLLATE utf8_general_ci

database - 极简博客引擎的理想数据库

mysql - 在MySQL中存储数据以供按日期范围查询

mysql - 尽管 sql_mode 为空,但存储过程引发 "incompatible with sql_mode=only_full_group_by"