我有3张桌子:
汽车,桌子上有一般信息
零件,表及名称和编号
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可以正常工作,并且所有行均正确返回!