2016-08-24 110 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