获得2x相同表的第1列结果

时间:2012-04-02 06:38:54

标签: mysql join

我有一个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行)两个用户数据?

2 个答案:

答案 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中没有自动方法将这些行转移到列。但是,您可以在GROUPu1._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_