我有 3 张 table :
- 汽车、 table 保存一般信息
- 零件、包含名称和 ID 的表格
- PartData,引用部件、列名和列值的表格
我期望的结果:
| 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 |
部分数据
| 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
最佳答案
我找到了解决方案......通过添加 GROUP BY 它有效并且所有行都正确返回!
关于Mysql 使用 max 进行动态列单选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208210/