我有3张桌子:
我期望的结果是:
| 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
答案 0 :(得分:0)
我找到了解决方案....通过添加GROUP BY 它可以正常返回所有行!