MySQL表上的多个联接

MySQL表上的多个联接

我有2张桌子。第一个表包含大量用户数据。第二个表包含一个类别列表,以及职位是否已填补。

我需要显示带有用户ID和用户名的类。

我尝试做“连接”-但名称似乎彼此覆盖,因此每行只得到一个名称。

用户表:

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


类表:

+-------------+--------+--------+--------+---+---------+
|  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       |
+-------------+-------------+------------+--------------+---+------------+


任何帮助将不胜感激

最佳答案

您需要为此使用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)

关于mysql - MySQL表上的多个联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12076345/

10-08 23:48