【发布时间】:2013-02-10 16:07:31
【问题描述】:
我正在为斯坦福大学的 DB 课程做介绍,这是家庭作业之一。我的代码做得很好,但我不太喜欢我两次重复使用相同的 SELECT-FROM-JOIN 部分:
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
这是代码中使用的两个表的 SQL 架构:
Highschooler(ID int, name text, grade int);
Friend(ID1 int, ID2 int);
我必须查询所有只有同年级朋友而不是其他年级朋友的高中生。有没有办法以某种方式只编写一次下面的代码,并为两个不同的 WHERE 子句 = 和 重复使用两次?
SELECT H1.ID
FROM Friend
JOIN Highschooler AS H1
ON Friend.ID1 = H1.ID
JOIN Highschooler AS H2
ON Friend.ID2 = H2.ID
编辑:我们需要提供 SQLite 代码。
【问题讨论】: