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之前的重复数据问题。希望这有助于...
答
你可以尝试这样的事情
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设计很难看并考虑一些改进...
+1查看设计而不是查询 – edosoft 2009-11-30 13:08:58