如何在SQLite中编写带有条件的CASE语句,该语句来自子查询的值



高中生表包含以下格式的数据:

高中生 ( 身份证, 姓名, 年级 (

中文(简体( : 有一个高中生,在某个年级有唯一的 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( 也存在。

赞表中的示例数据如下:

ID1      ID2
1689    1709
1709    1689
1782    1709
1911    1247
1247    1468
1641    1468
1316    1304
1501    1934
1934    1501
1025    1101

现在我的问题是:

对于每个喜欢比自己小 2 个或更多年级的学生,返回该学生的姓名和年级,以及他们喜欢的学生的姓名和年级。

为了实现这一点,我编写了下面的查询,我可以在其中获取学生、liked_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

我怎样才能做到这一点?我已经尝试过如果...然后,但无法使其工作。

请帮忙。

这给出了所需的答案:

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;

最新更新