の主キーを持つ users テーブルが与えられた場合、2 つのフィールド ( ) しか持たid
ないという外部テーブルがあります。これにより、異なるユーザー間にあらゆる種類の関係 (1 対多、1 対 1 など) を作成できます。ユーザーはどちらの列にも表示でき、両方の列は同じです。IOW、関係ごとに 1 つのエントリ。friends
userid1, userid2
id
特定のユーザーが持っているすべての友達を取得するにはどうすればよいですか? たとえば、ジョニーには 3 人の友人がいて、彼のユーザーid
は16
... 私の SQL クエリは次のようになりますか?
SELECT *
FROM db.users
JOIN db.friends
ON db.users.id = db.friends.userid1
AND db.users.id = 16
うまくいけば、これは明らかです。また、可能であれば、Jonny を結果セットから除外できますか?
このクエリは、リストされているように、次のことを示しています。
id name uuid birthday userid1 userid2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 3
ジョニーではなく、彼の友達が欲しいことを除いて、これはかなり近いです
みんなありがとう、おかげでうまくいきました。これが最終的な作業クエリです。
SELECT *
FROM db.users
WHERE db.users.id IN
(
SELECT db.friends.userid2 as id FROM db.friends WHERE db.friends.userid1 = 16
union
SELECT db.friends.userid1 as id FROM db.friends WHERE db.friends.userid2 = 16
)
それは私に与える:
id name uuid birthday
2 robin ABCDEFGHIJKLMNOP 1967-04-27 01:00:00
3 gary ABCDEFGHIJKLMNOP 1967-04-27 01:00:00