我有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可以正常工作,并且所有行均正确返回!

09-06 18:18