将两个垂直 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

演示:http://sqlfiddle.com/#!9/5fd33/7