将两个垂直 table 合并为一个水平 table
Merging two vertical tables onto one horizontal table
Table 定义
Table 1(水平)这是 table 个用户
| id | name | phone |
---------------------
| 1 | Bob | 800 |
| 2 | Phil | 800 |
Table 2(垂直 Table)这是 table 队
| id | name |
------------------
| 1 | Donkey |
| 2 | Cat |
Table 3(垂直Table)这个table连接前两个
| 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 |
此 table 将包含我的水平 table 数据,然后组合其他两个垂直 table 以创建附加列。其中 table 2 最终成为列名标题。并且行值是从 table 三个中提取的布尔值。
您正在追逐一个支点table:
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
Table 定义
Table 1(水平)这是 table 个用户
| id | name | phone |
---------------------
| 1 | Bob | 800 |
| 2 | Phil | 800 |
Table 2(垂直 Table)这是 table 队
| id | name |
------------------
| 1 | Donkey |
| 2 | Cat |
Table 3(垂直Table)这个table连接前两个
| 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 |
此 table 将包含我的水平 table 数据,然后组合其他两个垂直 table 以创建附加列。其中 table 2 最终成为列名标题。并且行值是从 table 三个中提取的布尔值。
您正在追逐一个支点table:
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