从自我关系表中选择用户详细信息

时间:2012-03-30 03:37:35

标签: sql relationship details

我有3个表(user,relationship和user_type)和这些数据(相关的):

USER TABLE:
id, username, avatar, user_type_id

RELATIONSHIP TABLE:
id, user_id1, user_id2, relationship_points

USER_TYPE
id

我正在尝试为每个关系创建一个条目,因此,ID为“1”的用户可能位于关系中的user_id1或user_id2中,因此,我不必复制不必要的数据。

我已经创建了(感谢另一个StackOverflow answer)一个查询来从用户中选择所有关系详细信息,但前提是它的id在“user_id1”中。

    SELECT
        r.id AS relationship_id,
        r.relationship_points AS points,
        u.username AS username,
        u.avatar_url AS avatar
    FROM
        relationship AS r
    INNER JOIN
        user AS u
    ON
        r.user_id2 = u.id
    INNER JOIN
        user_type AS t
    ON
        u.user_type_id = t.id
    WHERE
        r.user_id1 = ?

但是,正如您所看到的,如果用户位于“user_id2”中,则它不起作用。

我知道我可以进行另一个查询,但我认为这是“简单,懒惰”的方式,我很乐意在单个查询中学习如何执行此操作。

1 个答案:

答案 0 :(得分:0)

让我知道这是否成功:

SELECT
    r.id AS relationship_id,
    r.relationship_points AS points,
    u.username AS username,
    u.avatar_url AS avatar
FROM relationship AS r
INNER JOIN user u
ON r.user_id2 = u.id OR r.user_id1 = u.id
INNER JOIN user_type AS t
ON u.user_type_id = t.id
WHERE u.id = ?