表のid
とのuser_id
列はusers
、少なくとも紛らわしいですか? なぜ 2 つの「識別子」列があるのですか? 2 つのうちのどれが と結合しfriend.user_id
ますか? と結合するのは同じ列friend.friend_id
ですか? 目的は、friends.user_id
ログインしたばかりのユーザーであるすべての名前、またはログインしたばかりのユーザーであるすべての名前friends.friend_id
、またはその両方を表示することですか?
さらなる明確化が予定されているまでは、結果セットには両方の友達のリストが含まれていると想定します。つまり、ユーザーが友達になった人と、ユーザーを友達にした人です。users.user_id
また、列が結合列であると仮定します。
これは UNION として簡単に記述できます。UNION は、ログインしたユーザーが、ログインしたユーザーと友達になったユーザーと友達になった場合に、重複するエントリを削除することに注意してください (したがって、friends
表には、と の同じ値user_id
のペアfriend_id
。
TDQD (Test Driven Query Design) に移行すると、次のように記述できます (新しくログインしたユーザーが であると仮定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;
各コンポーネント クエリを個別にテストおよびデバッグし、それらを組み合わせて最終的な回答を作成できます。