如何在SQLite中使用Sub查询中的值写入CASE语句

时间:2017-08-02 07:52:42

标签: sqlite subquery case-expression

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 ...然后但是无法使它工作。

请帮助。

1 个答案:

答案 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;