Mysql单选用动态列使用max

时间:2016-10-23 21:58:42

标签: mysql sql select inner-join

我有3张桌子:

  • 汽车,表格包含一般信息
  • 零件,名称和ID的表
  • PartData,参考part,columnname和columnvalue的表

我期望的结果是:

| partname | Model  | Amount |
| Engine   | ModelA | 1      |
| Filter   | ModelB | 4      |
| Belt     | (null) | 2      |

您可以看到列名与部分组合,值是结果。 但是,我的查询返回第一个,而不是另一个。我错了什么?

某些背景信息: 我的应用程序可以由客户配置。所以我有可能拥有动态列。 例如:(我保持简单,使问题更清楚)

汽车

| id | name  |
| 1  | volvo |

零件

| id | carid | name   |
| 1  | 1     | Engine |
| 2  | 1     | Filter |
| 3  | 1     | Belt   |

Partdata

| id | part_id | columnname | columnvalue
| 1  | 1       | Model      | ModelA
| 2  | 1       | Amount     | 1
| 3  | 2       | Model      | ModelB
| 4  | 2       | Amount     | 4
| 5  | 3       | Amount     | 2

我的查询是:

SELECT `parts`.`name`, 
max(case when partdata.`columnname` = 'Model' then partdata.columnvalue end) AS `Model`,
max(case when partdata.`columnname` = 'Amount' then partdata.columnvalue end) AS `Amount` 
FROM `parts` INNER JOIN `partdata` 
ON `parts`.`id` = `partdata`.`part_id` 
WHERE `carid` = 1

那么,为什么我的查询没有返回所有行而只返回一行?

编辑:我使用max,所以当没有设置或找到任何值时,将返回NULL

1 个答案:

答案 0 :(得分:0)

我找到了解决方案....通过添加GROUP BY 它可以正常返回所有行!