Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 三重内连接保持标题_Mysql_Sql - Fatal编程技术网

Mysql 三重内连接保持标题

Mysql 三重内连接保持标题,mysql,sql,Mysql,Sql,你好 我有以下三个表(功能、人员和数据) 表格特征 --------------------------- | featureId | featureName | --------------------------- | 1 | Weight | | 2 | Age | | 3 | Height | --------------------------- 餐桌上的人 ---------------------

你好

我有以下三个表(功能、人员和数据)

表格特征

---------------------------
| featureId | featureName |
---------------------------
|     1     |   Weight    |
|     2     |     Age     |
|     3     |    Height   |
---------------------------
餐桌上的人

---------------------------
|  personId | personName  |
---------------------------
|     1     |    John     |
|     2     |     Doe     |
|     3     |    Mark     |
---------------------------
表数据 (pId=personId fId=特征ID)

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

看起来像是三个内部连接,但标题使它更复杂,我无法理解
谢谢你的帮助

您可以通过加入表和
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

你想要什么,你尝试过什么?你的问题是什么?抱歉,看起来标记中有错误,但问题还是被发送了。现在它是正确的。
--------------------------------
| Name | Weight | Age | Height |
--------------------------------
| John |  80    |  28 |  175   |
| Doe  |  70    |  22 |  168   |
| Mark |  100   |  44 |  180   |
--------------------------------
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