使用列值作为表名连接表

时间:2016-02-14 09:27:02

标签: mysql

我已经阅读了很多关于连接表的问题,其中列值用作表名,但我不知道如何在我的情况下实现它。

我有多张桌子。第一张表是user

    id   |  user_id  |  user_role
    1    |     1     |   admin
    2    |     2     |   manager
    3    |     3     |  employee

第二个表格是admin

    id    |   fname  |  lname
    1     |   A1     |    J
    2     |   A2     |    C
    3     |   A3     |    S

第三个表格是manager

    id      |   fname  |  lname
    1       |   M1     |    J
    2       |   M2     |    C
    3       |   M3     |    S

第三个表格是employee

    id       |   fname  |  lname
    1        |   E1     |    J
    2        |   E2     |    C
    3        |   E3     |    S

我怎样才能做到这样:

SELECT * FROM user u INNER JOIN user.user_role ur ON ur.id = u.user_id

所以它会产生类似的东西

u.id | u.user_id | u.user_role | ur.id |  ur.fname | ur.lname
 1   |    1      |   admin     |   1   |     A1    |    J
 2   |    2      |  manager    |   2   |     M2    |    C
 3   |    3      |  employee   |   3   |     E3    |    S

1 个答案:

答案 0 :(得分:3)

您可以使用UNION ALL

SELECT      * 
FROM        user u
INNER JOIN  (   SELECT   'admin' as user_role, id, fname, lname 
                FROM     admin
                UNION ALL
                SELECT   'manager' as user_role, id, fname, lname
                FROM     manager
                UNION ALL
                SELECT   'employee' as user_role, id, fname, lname 
                FROM     employee
            ) ur
         ON ur.id = u.user_id
        AND ur.user_role = u.user_role

这是工作SQL fiddle