SQL选择包含多个行的一个ID

时间:2016-08-24 12:54:53

标签: mysql sql select pivot entity-attribute-value

我有两张桌子:

表1:' user_fields'

id  name
1   age
2   birthdate
3   firstname

表2:' user_data'

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语句,显示每个user_id的名字和生日

示例行:

22    Peter    01.01.1990
25    Steve    05.08.1970

选择应该如何? 非常感谢!

2 个答案:

答案 0 :(得分:3)

您需要加入表格(如果您不想对值进行硬编码),然后执行汇总:

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;

答案 1 :(得分:-1)

您可以尝试将表格连接到自身并过滤仅使用生日值加入名称:

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
相关问题