mysql在两个表中选择

问题描述:

我有两个表和一个查询参考表。任何建议或帮助将不胜感激。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 

由于一些体面的工会查询已发布,我会谈论你的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

你可以尝试这样的事情

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 

这不是很清楚你想达到什么样的,但这里有一个猜测:

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设计很难看并考虑一些改进...