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