表格定义
表1(水平)这是一个用户表
| id | name | phone |
---------------------
| 1 | Bob | 800 |
| 2 | Phil | 800 |
表2(垂直表)这是一个团队表
| id | name |
------------------
| 1 | Donkey |
| 2 | Cat |
表3(垂直表)此表连接前两个
| id | user_id | team_id |
--------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
我的目标
我希望能够以这样的方式查询数据:我得到以下内容:
| id | name | phone | Donkey | Cat |
-------------------------------------
| 1 | Bob | 800 | 1 | 1 |
| 2 | Phil | 800 | 1 | Null |
此表将包含我的水平表数据,然后是其他两个垂直表的组合以创建附加列。表2最终成为列名称标题。并且行值从表3中拉出作为布尔值。
答案 0 :(得分:0)
您正在追踪数据透视表:
select u.*,
sum(case when t1.name = 'Donkey' then 1 else 0 end) Donkey,
sum(case when t1.name = 'Cat' then 1 else 0 end) Cat
from users u
inner join user_team ut1
on u.id = ut1.user_id
inner join teams t1
on ut1.team_id = t1.id
group by name