MySQL使用虚拟列作为加入点?

时间:2015-04-30 23:26:59

标签: mysql join

我有以下三个表格:

每月:

|  u_id   |  memb_type  |  run_day |
------------------------------------
|   1     |       1     |    410   |
|   2     |       1     |    410   |
|   1     |       2     |    510   |
|   2     |       1     |    510   |
|   1     |       2     |    610   |
|   2     |       1     |    610   |

memb_types:

|    id   |      name      |
----------------------------
|    1    |      member    |
|    2    |  active_member | 

用户:

|   id    |   join_date    |
----------------------------
|    1    |    2015-03-01  |
|    2    |    2015-04-04  |

我尝试编写的查询将显示用户在加入的前两个月memb_type。棘手的部分是monthly.run_day不是一个有效的日期时间,它基本上需要创建多个虚拟列,我现在有一些东西,我现在卡住了:

SELECT
      user.id,
      user.join_date,
      MONTH(user.join_date + INTERVAL 1 MONTH) AS `first_month`,
      "???" AS `first_month_memb_type`,
      MONTH(user.join_date + INTERVAL 2 MONTH) AS `second_month`,
      "???" AS `second_month_memb_type`
 FROM 
      user
 INNER JOIN
      monthly
 ON 
      user.id = monthly.u_id
 INNER JOIN
      memb_types
 ON
      monthly.memb_type = memb_types.id

我不确定如何使用MONTH(user.join_date + INTERVAL 1 MONTH)生成的数据并将其加入monthly run_day上加入的SUBSTRING(monthly.run_day, 1, 1)表中我们需要将月份中的值与run_day进行匹配但是我不知道如何将monthly表格重新加入first_month_memb_type两次second_month_memb_type和{ {1}}。

根据需要,所需的输出如下(简称为简称):

| id | join_date  | fm | fm_type | sm |    sm_type    |
-------------------------------------------------------
| 1  | 2015-03-01 | 4  |  member |  5 | active_member |
| 2  | 2015-04-04 | 5  |  member |  6 |    member     |

任何想法如何实现这一目标?

0 个答案:

没有答案