Как написать оператор CASE с условием для значений из подзапроса в SQLite
Таблица старшеклассников содержит данные в следующем формате:
Старшеклассник (удостоверение личности, имя, класс)
Английский: есть ученик старшей школы с уникальным 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 и самого 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
Как я могу сделать это? Я попробовал ЕСЛИ... ТО, но не смог заставить его работать.
Пожалуйста, помогите.
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;