美好的一天!
我有以下三个表格(功能,人物和数据)
表格功能
---------------------------
| featureId | featureName |
---------------------------
| 1 | Weight |
| 2 | Age |
| 3 | Height |
---------------------------
表人
---------------------------
| personId | personName |
---------------------------
| 1 | John |
| 2 | Doe |
| 3 | Mark |
---------------------------
表数据 (pId = personId fId = featureId)
--------------------------
| id | pId | fId | value |
--------------------------
| 1 | 1 | 1 | 80 |
| 2 | 1 | 2 | 28 |
| 3 | 1 | 3 | 175 |
| 4 | 2 | 1 | 70 |
| 5 | 2 | 2 | 22 |
| 6 | 2 | 3 | 168 |
| 7 | 3 | 1 | 100 |
| 8 | 3 | 2 | 44 |
| 9 | 3 | 3 | 180 |
--------------------------
我知道第三张桌子是一场噩梦,但这就是我所拥有的。 是否可以构建一个返回的查询(包含在PHP中使用的标题)
--------------------------------
| Name | Weight | Age | Height |
--------------------------------
| John | 80 | 28 | 175 |
| Doe | 70 | 22 | 168 |
| Mark | 100 | 44 | 180 |
--------------------------------
看起来像一个三重内连接,但标题使它更复杂,我无法弄明白 谢谢你的帮助!
答案 0 :(得分:0)
您可以在CASE
功能
MAX
来完成此操作
SELECT
p.personName
,MAX(CASE WHEN f.featureName='Weight' THEN d.value END) Weight
,MAX(CASE WHEN f.featureName='Age' THEN d.value END) Age
,MAX(CASE WHEN f.featureName='Height' THEN d.value END) Height
FROM people p
LEFT JOIN data d ON(p.personId=d.pId)
LEFT JOIN features f ON(f.featureId=d.fId)
GROUP BY d.pId