mysql, избегайте ограничений в подзапросе - PullRequest
0 голосов
/ 03 марта 2020

Я хочу использовать лимит в (некоррелированном) подзапросе. У меня есть следующие отношения:

  • Оценка - это представляет собой тест. Один из столбцов в этой таблице создан идентификатор учителя
  • Вопрос - это представляет вопрос. Это имеет отношение 1: n к оценке (оценка содержит 1 или более вопросов)
  • Неверный ответ - это неверный ответ, отношение 1: n с вопросом (вопрос имеет 1 или более неправильных ответов)

Я пытаюсь выбрать диапазон оценок (объединенный с их вопросами / неправильными ответами) для данного учителя для использования с веб-службой RESTful с использованием нумерации страниц (т.е. выберите оценки 5 -10 и связанные с ними вопросы / ответы для данного учителя). Тем не менее, я столкнулся с проблемами. Сначала я столкнулся со следующей ошибкой (, КТО УЖЕ УСТРАНЕНО )

java. sql .SQLSyntaxErrorException: эта версия MySQL еще не поддерживает 'LIMIT & IN / ALL / ANY / SOME subquery'

Чтобы исправить это, у меня есть два выбранных гнезда select (как указано во многих сообщениях SO, таких как этот: Получить все Заработная плата сотрудника из таблиц сотрудников с 3-го по величине оклада в MYSQL)

sql Я работаю (с именованным шаблоном jdb c):

SELECT * 
FROM test.ASSESSMENT A 
LEFT OUTER JOIN test.QUESTION Q ON A.ISBN = Q.ASSESSMENT_ISBN 
LEFT OUTER JOIN test.INCORRECT_ANSWER I ON I.QUESTION_SID = 
Q.QUESTION_SID 
WHERE A.ISBN IN ( SELECT * 
                  FROM ( SELECT ISBN 
                         FROM test.ASSESSMENT 
                         WHERE CREATED_TEACHER_ID = :CREATED_TEACHER_ID 
                         ORDER BY ISBN ASC 
                         LIMIT :LIMIT, :OFFSET
                       ) AS T
                )

Исключение (из нижней части трассировки стека):

В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей MySQL версии сервера, чтобы узнать правильный синтаксис для использования рядом с: CREATED_TEACHER_ID ORDER BY ISBN AS C LIMIT: LIMIT,: OFFSET) AS T)

Пожалуйста, сообщите если у вас есть предложения.

1 Ответ

0 голосов
/ 03 марта 2020

Переместить его в предложение FROM:

FROM test.ASSESSMENT A JOIN
     (SELECT DISTINCT ISBN
      FROM (SELECT ISBN 
            FROM test.ASSESSMENT 
            WHERE CREATED_TEACHER_ID = :CREATED_TEACHER_ID 
            ORDER BY ISBN ASC 
            LIMIT :LIMIT, :OFFSET
           ) a
     ) a2
     ON a2.ISBN = a.ISBN
     LEFT OUTER JOIN
     test.QUESTION Q
     ON A.ISBN = Q.ASSESSMENT_ISBN LEFT OUTER JOIN
     test.INCORRECT_ANSWER I
     ON I.QUESTION_SID = Q.QUESTION_SID 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...