2014-06-22 29 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