私はスタンフォード大学で DB コースの紹介を行っていますが、これは宿題の 1 つです。私のコードはうまく機能しますが、同じ SELECT-FROM-JOIN 部分を 2 回再利用した方法があまり好きではありません。
SELECT name, grade
FROM Highschooler
WHERE
ID IN (
SELECT H1.ID
FROM Friend
JOIN Highschooler AS H1
ON Friend.ID1 = H1.ID
JOIN Highschooler AS H2
ON Friend.ID2 = H2.ID
WHERE H1.grade = H2.grade
) AND
ID NOT IN (
SELECT H1.ID
FROM Friend
JOIN Highschooler AS H1
ON Friend.ID1 = H1.ID
JOIN Highschooler AS H2
ON Friend.ID2 = H2.ID
WHERE H1.grade <> H2.grade
)
ORDER BY grade, name
これは、コードで使用される 2 つのテーブルの SQL スキーマです。
Highschooler(ID int, name text, grade int);
Friend(ID1 int, ID2 int);
同じ学年にしか友達がなく、他の学年には友達がいないすべての高校生にクエリを実行する必要がありました。以下のコードを 1 回だけ書き、2 つの異なる WHERE 句 = と <> に対して 2 回再利用する方法はありますか?
SELECT H1.ID
FROM Friend
JOIN Highschooler AS H1
ON Friend.ID1 = H1.ID
JOIN Highschooler AS H2
ON Friend.ID2 = H2.ID
編集: SQLite コードを提供する必要があります。