Mysql 使用 max 进行动态列单选

标签 mysql sql select inner-join

我有 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/

相关文章:

php - 如何选择相对值最高的列?

php - MySQL PHP SELECT WHERE id 等于最大

C# 更改 DataGridView 中的列标题

sql - ORDER BY 无法 Access

sqlite - 使用 Persist 将 Sqlite 表中所有记录中的一列提取到 Haskell 中的串联字符串中

php - 展示产品或系列

mysql - 存储在 VARCHAR mysql 中的长字符串作为一行输出

php - Eclipse:PDO "could not find driver",即使它已安装并启用

mysql - mysql 查询出现异常错误 "delete"

mysql - 使用内部连接更新多个表