2016-08-24 108 views
2

我有两个表:SQL与多个行选择一个ID

表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 

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

回答

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; 
+0

谢谢! –

+0

现在我有第三个表,我想添加到我的输出。 'api_calls'与collum user_id和状态。我想将每个user_id的'status'添加到第一个语句的输出中。 –

+0

@FabianTschullik这是什么意思?,你想要一种通用的查询,将与该?,因为我不知道你真的想要什么 – Lamak

-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