[Неочевидная] причина, по которой SQL требуется SORT , является ключевым словом DISTINCT .
В зависимости от данных и базовых структур таблиц вы можете покончить с этим DISTINCT и, следовательно, не вызывать эту ошибку.
Вы с готовностью нашли альтернативное решение, которое заключается в обрезании некоторых полей в списке SELECT.
Редактировать : Ответ «Не могли бы вы объяснить, почему DISTINCT может быть причиной здесь?»
Как правило, способ удовлетворения требования DISTINCT зависит от
- контекст данных (ожидаемое количество строк, наличие / отсутствие индекса, размер строки ...)
- версия / марка реализации SQL (в частности, оптимизатор запросов получает новую или измененную эвристику с каждой новой версией, что иногда приводит к появлению альтернативных планов запросов для различных конструкций в различных контекстах)
Тем не менее, все возможные планы, связанные с «запросом DISTINCT», включают * некоторую форму * сортировки соответствующих записей. В своей простейшей форме план «кулак» создает список подходящих строк (записей) (список записей, которые удовлетворяют частям запроса WHERE / JOINs / и т. Д.), А затем сортирует этот список (который, возможно, включает несколько дубликатов). сохраняя только самое первое вхождение каждого отдельного ряда. В других случаях, например, когда выбрано только несколько столбцов и когда доступны некоторые (или) индексы, охватывающие эти столбцы, в плане запроса не используется явный шаг сортировки, но зависимость от индекса неявно подразумевает «сортируемость» «из основных столбцов. В других случаях пока оптимизатор запросов выбирает этапы, включающие различные формы слияния или хэширования, и это тоже, в конечном счете, подразумевает возможность сравнения двух строк.
Итог: DISTINCT подразумевает некоторую сортировку.
В конкретном случае вопроса ошибка, сообщаемая SQL Server и препятствующая завершению запроса, заключается в том, что " Сортировка невозможна в строках больше ..." И, ключевое слово DISTINCT является единственной очевидной причиной, по которой запрос требует какой-либо сортировки (кстати, многие другие конструкции SQL подразумевают сортировку: например, UNION), отсюда и идея удаления DISTINCT (если это логически возможно).
Фактически вы должны удалить его, для целей тестирования , чтобы утверждать, что без DISTINCT запрос завершается нормально (если только с некоторыми дубликатами). Как только этот факт подтвердится, и если в результате запроса может получиться повторяющиеся строки, найдите способы создания запроса без дубликатов без ключевого слова DISTINCT; конструкции, включающие подзапросы, иногда могут использоваться для этой цели.
несвязанный совет - использовать псевдонимы таблиц, используя короткую строку, чтобы избежать повторения этих длинных имен таблиц. Например (только несколько таблиц, но вы поняли ...)
SELECT DISTINCT JR.JobReqId, JR.JobStatusId,
tblJobClass.JobClassId, tblJobClass.Title,
JR.JobClassSubTitle, JA.JobClassDesc, JA.EndDate, JA.AgencyMktgVerbage,
JA.SpecInfo, JA.Benefits,
S.MinRateSal, S.MaxRateSal, S.MinRateHour, S.MaxRateHour,
tblJobClass.StatementEval,
JR.ApprovalDate, JR.RecruiterId, JR.AgencyId
FROM (
(tblJobReq AS JR
LEFT JOIN tblJobAnnouncement AS JA ON JR.JobReqId = JA.JobReqId)
INNER JOIN tblJobClass ON tblJobReq.JobClassId = tblJobClass.JobClassId)
LEFT JOIN tblSalary AS S ON tblJobClass.SalaryCode = S.SalaryCode
WHERE (JR.JobClassId in
(SELECT JobClassId from tblJobClass
WHERE tblJobClass.Title like '%Family Therapist%'))