2009-11-30 61 views
0

我有兩個表和一個查詢參考表。任何建議或幫助將不勝感激。mysql在兩個表中選擇

table1的

user_id username  firstname  lastname  address 
    1  john867  John   Smith   caloocan 
    2  bill96  Bill   Jones   manila 

table2中

user_name_id username  firstname  lastname  address  designation 
    1    jakelucas  Jake   Lucas   caloocan  employee 
    2    jadejones  Jade   Jones   Quezon   student 
    3    bong098  Bong   Johnson   pasig   employee 

參考表

ref_id username  friend_username 
    1  tirso   bill96 
    2  tirso   jadejones 
    2  tirso   bong098 

輸出謹此

user_id user_name_id  username  firstname  lastname  address  designation 
    2       bill96   Bill   Jones   manila 
      2    jadejones  Jade   Jones   Quezon   student 
      3    bong098   Bong   Johnson   pasig   employee 

回答

1

由於一些體面的工會查詢已發佈,我會談論你的db設計一點點。

在花費太多時間考慮將這些表連接在一起之前,我一定會認真考慮IronGoofy所說的。看起來你有很多重複的數據來管理你的表格,並且如果這種擴展可能會很快失去控制。

我想你應該試着分開你的數據,以便重要的信息可以鏈接到user_id。

所以,舉例來說,你可以有幾桌在這裏...

User Information Table: 
--------- 
User_id 
Username 
First Name 
Last Name 
Address 
Designation_id 

Friend Link Table: 
--------- 
Friend_link_id 
User_id  
Friend_user_id 

Designation Table: 
--------- 
Designation_id 
Designation_name 

因此,而不是鏈接您的用戶名所有的地方,你會簡單地對各種ID的加盟。有點清潔,並缺少IMO之前的重複數據問題。希望這有助於...

+0

+1查看設計而不是查詢 – edosoft 2009-11-30 13:08:58

1

你可以嘗試這樣的事情

SELECT [table1].[USER_ID], 
     NULL user_name_id, 
     [table1].username, 
     [table1].firstname, 
     [table1].lastname, 
     [table1].address, 
     NULL designation 
FROM reference_table INNER JOIN 
     table1 ON [reference_table].friend_username = [table1].username 
UNION 
SELECT NULL USER_ID, 
     [table2].user_name_id, 
     [table2].username, 
     [table2].firstname, 
     [table2].lastname, 
     [table2].address, 
     [table2].designation 
FROM reference_table INNER JOIN 
     table2 ON [reference_table].friend_username = [table2].username 
0

這不是很清楚你想達到什麼樣的,但這裏有一個猜測:

SELECT user_id, NULL as user_name_id, username, ... 
FROM ref_tab r join table1 t1 on r.friend_username = t1.username 
WHERE r.ref_id = 1 
UNION 
SELECT NULL as user_id, user_name_id, username, ... 
FROM ref_tab r join table1 t2 on r.friend_username = t2.username 
WHERE r.ref_id = 2 

但我不得不在DB設計很難看並考慮一些改進...