Highschooler表格包含以下格式的数据:
Highschooler(ID,姓名,成绩)
英语:有一名高中生有一个特定的ID,并且在某个年级有一个名字。
表格中的样本数据是:
ID NAME GRADE
1510 Jordan 9
1689 Gabriel 9
1381 Tiffany 9
1709 Cassandra 9
1101 Haley 10
1782 Andrew 10
1468 Kris 10
喜欢的表格包含以下格式的数据:
喜欢(ID1,ID2)
英语:ID1的学生喜欢ID2的学生。喜欢某人不一定是相互的,所以如果(123,456)在Likes表中,则不能保证(456,123)也存在。
Likes表中的示例数据如下:
ID1 ID2
1689 1709
1709 1689
1782 1709
1911 1247
1247 1468
1641 1468
1316 1304
1501 1934
1934 1501
1025 1101
现在我的问题是:
对于每个喜欢比自己年轻2个或更多成绩的学生,请返回该学生的姓名和成绩,以及他们喜欢的学生的姓名和成绩。
为了达到这个目的,我写了下面的查询,我可以获得学生,likes_student及其成绩的数据。我要做的是减去Liked_student和学生自己的成绩,如果成绩> = 2,那么我输出学生的详细信息。这种成绩检查是我在CASE声明中尝试做的失败。
当我执行内部查询时,子查询运行时没有任何问题,这意味着我能够获取学生的所有详细信息。子查询的结果如下:
DIFFERENCE STUDENT_GRADE STUDENT_NAME STUDENT_LIKED_GRADE STUDENT_LIKED_NAME
0 9 Cassandra 9 Gabriel
0 9 Gabriel 9 Cassandra
1 10 Andrew 9 Cassandra
2 12 John 10 Haley
只有在CASE声明中它才会发出错误
错误代码:1109。未知表格' INTER1'在字段列表中
SELECT CASE WHEN INTER1.GRADE_DIFFERENCE >= 2 THEN
(SELECT INTER1.* FROM
(SELECT (H1.grade-H2.grade) AS GRADE_DIFFERENCE,
H1.grade AS STUDENT_GRADE,
H1.name AS STUDENT_NAME,
H2.grade AS STUDENT_LIKED_GRADE,
H2.name AS STUDENT_LIKED_NAME
FROM Highschooler H1
INNER JOIN Likes L
ON H1.ID = L.ID1
INNER JOIN Highschooler H2
ON H2.ID = L.ID2) INTER1)
END
我怎样才能做到这一点?我试过IF ...然后但是无法使它工作。
请帮助。
答案 0 :(得分:1)
这给出了必要的答案:
SELECT INTER1.STUDENT_GRADE,
INTER1.STUDENT_NAME,
INTER1.STUDENT_LIKED_GRADE,
INTER1.STUDENT_LIKED_NAME
FROM
(SELECT (H1.grade-H2.grade) AS GRADE_DIFFERENCE,
H1.grade AS STUDENT_GRADE,
H1.name AS STUDENT_NAME,
H2.grade AS STUDENT_LIKED_GRADE,
H2.name AS STUDENT_LIKED_NAME
FROM Highschooler H1
INNER JOIN Likes L
ON H1.ID = L.ID1
INNER JOIN Highschooler H2
ON H2.ID = L.ID2) INTER1
WHERE INTER1.GRADE_DIFFERENCE >=2;