gpt4 book ai didi

mysql - 三重内连接保留标题

转载 作者:行者123 更新时间:2023-11-30 00:19:27 24 4
gpt4 key购买 nike

美好的一天!

我有以下三个表(特征、人员和数据)

表格功能

---------------------------
| featureId | featureName |
---------------------------
| 1 | Weight |
| 2 | Age |
| 3 | Height |
---------------------------

餐 table 上的人

---------------------------
| personId | personName |
---------------------------
| 1 | John |
| 2 | Doe |
| 3 | Mark |
---------------------------

表格数据(pId = 人员 IDfId = 特征Id)

--------------------------
| 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 |
--------------------------

我知道第三张 table 是一场噩梦,但这就是我所拥有的。是否可以构建一个返回的查询(包含在 PHP 中使用的标题)

--------------------------------
| Name | Weight | Age | Height |
--------------------------------
| John | 80 | 28 | 175 |
| Doe | 70 | 22 | 168 |
| Mark | 100 | 44 | 180 |
--------------------------------

看起来像一个三重内连接,但标题使它变得更加复杂,我无法弄清楚感谢您的帮助!

最佳答案

您可以通过在 MAX 函数中加入表和 CASE 来实现此目的

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

Fiddle Demo

关于mysql - 三重内连接保留标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23360671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com