mysql在两个表中选择

时间:2009-11-30 12:27:49

标签: sql mysql

我有两个表和一个查询参考表。任何建议或帮助都会非常感激。

表1

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

表2

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

由于已经发布了一些体面的联合查询,我将稍微谈谈你的数据库设计。

在你花费太多时间考虑加入这些表之前,我肯定会认真考虑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之前的重复数据问题。希望这会有所帮助...

答案 2 :(得分: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

但是我会仔细研究数据库设计并考虑一些改进......