指定されたフィールドを持つ2つのテーブルがあります
高校生
- 名前
- 学年
- ID
いいね
- id1
- id2
HighSchooler は高校生に関する情報を保持し、Likes は高校の誰が誰を好きかを示す関係テーブルです。id1 の生徒は id2 の生徒が好きです。一方向の関係 (John が Lucy を好きで、Lucy が John を好きではない) と双方向の関係 (Albert が Sandra を好きで、Sandra も Albert が好き) の両方があります。
双方向の関係にある名前を持つ 2 つの列を返すクエリが必要です。つまり、A が B を好み、B が A を好む場合、サンプルの結果セットは次のようになります。
name | name
A B
私はそれをいじってこのクエリを思いつきましたが、理解できず、最適だとは思いません。
SELECT DISTINCT a.name, b.name
FROM Highschooler a, Highschooler b, Likes l1
JOIN Likes l2 on l1.ID1=l2.ID2
WHERE a.ID=l1.ID2 AND b.ID=l1.ID1 AND a.ID=l2.ID1 AND a.ID > b.ID;