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