Mysql 一个ID具有多行的SQL选择
我有两张桌子: 表1:“用户字段”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
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。非常感谢。