2014-06-22 31 views
0

對付我在SQL這三個表的遊戲:結合三個表只與一個

user_stats與主鍵ID

| userid | kills | deaths | 
|--------|-------|--------| 
| 10 | 5 | 4 | 

user_items(項目用戶已經購買)與常規整數主鍵ID - 當用戶購買一個新項目時,添加一行

| id | userid | itemid | 
|----|--------|--------| 
| 1 | 10 | 1 | 
| 2 | 10 | 2 | 
| 3 | 10 | 3 | 

user_details與主鍵的用戶ID(用戶已裝備的物品)

| userid | item1 | item2 | 
|--------|-------|-------| 
| 10 | 1 | 3 | 

我只想對付一個表,但我需要的所有信息,用戶啓動時。我想將這三個表合併爲一個,但user_items對於一個用戶有多行,因爲您可以購買多個項目。作爲SQL的陌生人,我該如何解決這個問題?

回答

2

信息在所有三個表一join並得到你想要像下面

select us.* 
from user_stats us 
inner join user_item ui on us.userid = ui.userid 
inner join user_details ud on us.userid = ud.userid 

由於所有的表都有一個共同的列userid具體的數據,你可以如用NATURAL JOIN

select * 
from user_stats 
natural join user_item 
natural join user_details 
+0

謝謝一堆,猜我只是忽略了這個選項:) – user1930226

+0

如果我在這種情況下加入表,它會返回3行與每行中的所有信息 - 因爲user_items中的3行,是正確的嗎?如果一個用戶有很多項目,比如50,那麼加入會影響性能?什麼是更好的方法? – user1930226

+0

@ user1930226,這是正確的。它可能也可能不會。在你的情況下,如果你看到所有3行都是相同的(重複行)。所以要避免使用'distinct'關鍵字;這將結束給你只有一個獨特的行。看到這個小提琴http://sqlfiddle.com/#!2/5a6d1/5 – Rahul