我有两个表和一个查询参考表。任何建议或帮助都会非常感激。
表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
答案 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
但是我会仔细研究数据库设计并考虑一些改进......