2012-08-22 66 views
0

我有2个表。第一个表格包含大量的用户数据。第二个表格包含一个类别列表,以及这些位置是否已填满。mySQL表上的多个连接

我需要显示类,用户名和用户名。

我试过做“连接” - 但名称似乎只是相互覆盖,所以我只得到每行一个名称。

用户表:

+----------+---------+ 
| user_ID | name | 
+----------+---------+ 
|  1 | Smith | 
+----------+---------+ 
|  2 | Jones | 
+----------+---------+ 
|  3 | Tim | 
+----------+---------+ 
etc 

Class表:

+-------------+--------+--------+--------+---+---------+ 
| class_date | Spot 1 | Spot 2 | Spot 3 | . | Spot 16 | 
+-------------+--------+--------+--------+---+---------+ 
| 2012/1/1 | 1 | 4 | 8 | . | 5  | 
+-------------+--------+--------+--------+---+---------+ 
| 2012/2/1 | 2 | NULL | 1 | . | 3  | 
+-------------+--------+--------+--------+---+---------+ 
| 2012/3/1 | 3 | 7 | NULL | . | NULL | 
+-------------+--------+--------+--------+---+---------+ 

我想达到的目标:

+-------------+-------------+------------+--------------+---+------------+ 
| class_date | Spot 1 | Spot 2 | Spot 3 | . | Spot 16 | 
+-------------+-------------+------------+--------------+---+------------+ 
| 2012/1/1 | 1 - Smith | 4 - Ben | 8 - Drew | . | 5 - Loz | 
+-------------+-------------+------------+--------------+---+------------+ 
| 2012/2/1 | 2 - Jones | NULL  | 1 - Smith | . | 3 - Tim | 
+-------------+-------------+------------+--------------+---+------------+ 
| 2012/3/1 | 3 - Tim | 7 - Dan | NULL  | . | NULL  | 
+-------------+-------------+------------+--------------+---+------------+ 

任何帮助将不胜感激

回答

2

您需要使用LEFT JOIN为此。尝试,

SELECT a.class_date, 
     CONCAT(a.Spot1, ' - ', b.name) AS `SPOT 1`, 
     CONCAT(a.Spot2, ' - ', c.name) AS `SPOT 2`, 
     CONCAT(a.Spot3, ' - ', d.name) AS `SPOT 3`, 
     ... -- keep doing until last column (i guess up to 16) 
FROM ClassTable a 
      LEFT JOIN `UserTable` b 
       ON a.Spot1 = b.user_ID 
      LEFT JOIN `UserTable` c 
       ON a.Spot2 = c.user_ID 
      LEFT JOIN `UserTable` d 
       ON a.Spot3 = d.user_ID 
     ... ... -- keep doing until last column (i guess up to 16)