使用一个表中字段的值作为另一个表中字段的列名

时间:2014-04-25 06:58:41

标签: mysql

我有3张这样的表

http://sqlfiddle.com/#!2/df3e6/10

我希望使用t2中的name-field作为t3的列名

我的最终目标是:

---------------------------------
| ID | NAME  | AMOUNT | PRODUCT |
---------------------------------
| 1  | name1 |    1   | potato  |
| 2  | name2 |   20   | fruit   |
---------------------------------

这是可行的还是我必须"排序"这样查询后呢?

2 个答案:

答案 0 :(得分:1)

透视基于name值的结果。

SELECT 
  `t1`.* 
  , max( case when `t2`.`name` = 'amount' then `t3`.`value` 
              else null 
         end ) as 'Amount'
  , max( case when `t2`.`name` = 'product' then `t3`.`value` 
         else null 
         end ) as 'Product'
FROM `t1`
  LEFT JOIN `t3`
    ON `t1`.`id` = `t3`.`t1_id`
  LEFT JOIN `t2`
    ON `t2`.`id` = `t3`.`t2_id`
  GROUP BY `t1`.`id`

演示 @ MySQL 5.5.32 Fiddle

答案 1 :(得分:0)

如果我正确理解您的问题,您可以使用嵌套查询,例如:

SELECT (SELECT `name` AS `value_type` from `t2` WHERE `value` = "product") FROM `t3`