2016-07-26 34 views
0

我有以下兩個表:MySQL的:從另一個表的列獲取行

用戶:

id name 
1 bob 
2 joe 
3 paul 

財產:

id user_id type  name 
1 1  car   honda 
2 1  computer mac 
3 2  car   toyota 
4 2  computer pc 
5 2  phone  htc 
6 3  car   toyota 
7 3  computer pc 
8 3  phone  samsung 

我想創建一個查詢,使得我得到這個作爲輸出:

user_id name car  computer phone 
1  bob  honda mac 
2  joe  toyota pc   htc 
3  paul toyota pc   samsung 

我可以在不使用子查詢的情況下執行此操作嗎?任何幫助將不勝感激,謝謝!

+0

請發佈我們創建的表格和插入數據。那麼我會寫你一個查詢 –

+1

固定的列(列數和名稱)? – Brian

+0

是的,固定的,接受的答案是完美的 – zeke

回答

2

如果類型列表是固定的,你可以使用這樣的查詢:

select 
    p.user_id, 
    u.name, 
    max(case when p.type='car' then p.name end) as car, 
    max(case when p.type='computer' then p.name end) as computer, 
    max(case when p.type='phone' then p.name end) as phone 
from 
    possesions p inner join users u 
    on p.user_id=u.id 
group by 
    p.user_id, 
    u.name 

解釋:case when將返回p.name當條件爲真,否則返回null。這裏我們按user_id和name分組,並且max()將返回每個組的最大非空值。

+0

太好了,謝謝。我在做這件事完全一樣的事情,除了我沒有圍繞case語句包裝max函數。你介意解釋一下在做什麼? – zeke

+0

我不認爲這將工作,如果一個人有超過一輛車,電腦等等。 – mseifert

+0

@ mseifert你說得對,我認爲每個用戶只能指定一種類型。如果不是這種情況,而不是max(),我們可以使用group_concat()例如... – fthiella

相關問題