表中的id
和user_id
列users
至少令人困惑?为什么有两个“标识符”列?两者中的哪一个加入friend.user_id
?与 连接的列是同一列friend.friend_id
吗?目标是显示friends.user_id
刚刚登录的用户的所有名称,还是显示刚刚登录的用户的所有名称friends.friend_id
,或两者兼而有之?
在进一步澄清之前,我将假设结果集应该包括两个朋友列表:被用户加为好友的人和已经成为用户加好友的人。我还将假设该users.user_id
列是连接列。
我们可以很容易地把它写成一个 UNION,注意一个 UNION 将消除重复条目,因为登录的用户已经加了一个用户的好友,而这个用户也加了登录的用户的好友(所以表中有两个条目friends
带有user_id
和中的相同值对friend_id
。
进入TDQD(测试驱动查询设计),我们可以写(假设新登录的用户是user_id = 12052822
):
被用户 12052822 加为好友的用户
SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
FROM website.friends AS f
JOIN website.users AS u ON f.friend_id = u.user_id
JOIN website.profile AS p ON p.user_id = u.user_id
WHERE f.user_id = 12052822;
已加好友用户 12052822 的用户
SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
FROM website.friends AS f
JOIN website.users AS u ON f.user_id = u.user_id
JOIN website.profile AS p ON p.user_id = u.user_id
WHERE f.friend_id = 12052822;
两组用户
SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
FROM website.friends AS f
JOIN website.users AS u ON f.friend_id = u.user_id
JOIN website.profile AS p ON p.user_id = u.user_id
WHERE f.user_id = 12052822;
UNION
SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
FROM website.friends AS f
JOIN website.users AS u ON f.user_id = u.user_id
JOIN website.profile AS p ON p.user_id = u.user_id
WHERE f.friend_id = 12052822;
您可以分别测试和调试每个组件查询,然后将它们组合起来以创建最终答案。