Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 一个ID具有多行的SQL选择_Mysql_Sql_Select_Pivot_Entity Attribute Value - Fatal编程技术网

Mysql 一个ID具有多行的SQL选择

Mysql 一个ID具有多行的SQL选择,mysql,sql,select,pivot,entity-attribute-value,Mysql,Sql,Select,Pivot,Entity Attribute Value,我有两张桌子: 表1:“用户字段” id name 1 age 2 birthdate 3 firstname 表2:“用户数据” user_id user_field_id value 22 1 50 22 2 01.01.1990 22 3 Peter 25 1 33 25 2 05.08

我有两张桌子:

表1:“用户字段”

id  name
1   age
2   birthdate
3   firstname
表2:“用户数据”

user_id user_field_id value
22          1           50
22          2           01.01.1990
22          3           Peter
25          1           33
25          2           05.08.1970
25          3           Steve
现在我想创建一个sql语句,它显示每个用户id的名字和生日

示例行:

22    Peter    01.01.1990
25    Steve    05.08.1970
select应该是什么样子的?
非常感谢

您需要加入表(如果不想硬编码值),然后执行聚合:

SELECT  ud.user_id,
        MIN(CASE WHEN uf.name = 'firstname' THEN ud.value END) as firstname,
        MIN(CASE WHEN uf.name = 'birthday' THEN ud.value END) as birthday
FROM user_data ud
INNER JOIN user_fields uf
    ON ud.user_field_id = uf.user_field_id 
GROUP BY ud.user_id;
好的,根据您的新需求,一个简单的
JOIN
即可:

SELECT  ud.user_id,
        MIN(CASE WHEN uf.name = 'firstname' THEN ud.value END) as firstname,
        MIN(CASE WHEN uf.name = 'birthday' THEN ud.value END) as birthday,
        MIN(ac.status) as status
FROM user_data ud
INNER JOIN user_fields uf
    ON ud.user_field_id = uf.user_field_id 
LEFT JOIN api_calls ac
    ON ud.user_id = ac.user_id
GROUP BY ud.user_id;

您可以尝试将表连接到表本身,并仅将名称与生日连接起来进行过滤:

SELECT name.user_id, name.value AS Name, bday.value AS birthdate
FROM t name
INNER JOIN t bday
ON name.user_id = bday.user_id
AND name.t = 3 AND bday.t = 2

现在我有了第三个表,我想把它添加到我的输出中使用collum用户id和状态调用api。我想将每个用户id的“状态”添加到第一条语句的输出中。@FabianTschullik这是什么意思?你想要一种通用的查询来处理它吗?因为我不知道你真正想做什么want@FabianTschullik对不起,信息太少了。
api\u调用
表是否每个用户id只有一行?如果有多行,会发生什么?我应该选择哪种状态?。以后还会有更多的表要加入吗?@Lamek:每个用户id只有一行。以后还会有一个表和我想加入的同一个syle。非常感谢。