我读过很多关于连接表的问题,其中列值用作表名,但我不知道如何在我的案例中实现它。
我有多张桌子。第一个表是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

最佳答案

您可以使用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

关于mysql - 使用列值作为表名连接表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35390238/

10-12 06:19