1

の主キーを持つ users テーブルが与えられた場合、2 つのフィールド ( ) しか持たidないという外部テーブルがあります。これにより、異なるユーザー間にあらゆる種類の関係 (1 対多、1 対 1 など) を作成できます。ユーザーはどちらの列にも表示でき、両方の列は同じです。IOW、関係ごとに 1 つのエントリ。friendsuserid1, userid2

id特定のユーザーが持っているすべての友達を取得するにはどうすればよいですか? たとえば、ジョニーには 3 人の友人がいて、彼のユーザーid16... 私の 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
4

4 に答える 4

1

句の最後に the の条件を追加user.idします。where

Select * From users
INNER JOIN friends on
users.id = friends.userid1
Where users.id = 16

また、一致する場所からのみInner Joinすべてのレコードを返すを使用しますusersfriends

于 2013-04-16T19:09:58.007 に答える