2016-02-14 22 views
3

我已經閱讀了許多有關連接表的問題,其中列值用作表名,但我不知道如何在我的案例中實現它。使用列值作爲表名加入表

我有多個表。第一張表是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 

回答

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

+0

工程很好。謝謝。 – iamdevlinph

+0

Sry。只是他的數據顯示,如果沒有這種情況,它會造成很多重複 – sagi

+0

我沒有定義排序規則。我只是在使用phpmyadmin創建表時使用了默認值。 – iamdevlinph