我有一个users
表和一个friends
表。
我想获得1位用户的友谊,但在结果中同时获取用户信息。 例如,让我们说我有这些表:
- users (_id_, username, firstname, lastname)
- friends (_#id1, #id2_)
以下是一些数据:
- users (1, foo, Foo, BAR)
(2, john, John, DOE)
- friends (1, 2)
如果我查询fiendship WHERE id1 = 1 OR id2 = 1
,我知道使用JOIN
我可以获取每一行的用户数据。但是如何获得1个结果(1行)两个用户数据?
答案 0 :(得分:1)
SELECT u1.*, u2.*
FROM users u1
JOIN friends f1
ON u1._ID_ = friends._#id1_
JOIN users u2
ON u2._ID_ = friends._#id2_
每行将包含来自一个用户的所有信息,然后包含来自第二个用户的所有信息。您可能希望将第一个JOIN friends f1
替换为LEFT OUTER JOIN friends f1
,以便为没有朋友的用户显示一行。
小心:有多个朋友的用户会显示多行。 MySQL中没有自动方法将这些行转移到列。但是,您可以在GROUP
上u1._ID_
,然后使用GROUP_CONCAT
功能显示朋友信息。
答案 1 :(得分:1)
SELECT
u1.*,
u2.*
FROM
friends
JOIN users AS u1
ON friends._#id1=u1._id_
JOIN users AS u2
ON friends.#id2_=u2._id_