SQL не имеет неявного порядка. Если не указано ORDER BY
, то результаты могут возвращаться в любом порядке и потенциально разные заказы каждый раз, когда один и тот же запрос выполняется по тем же данным.
Часто используемый подход заключается в использовании сазе, но это может стать неуклюжим ...
ORDER BY
CASE HId WHEN 4 THEN 1
WHEN 5 THEN 2
WHEN 7 THEN 3
WHEN 8 THEN 4
WHEN 1 THEN 5
WHEN 123 THEN 6
WHEN 312 THEN 7 END
Альтернативой является РЕГИСТРИРУЙТЕСЬ на таблицу, которая включает в себя как значения вы фильтрации с помощью и для сортировки. Это немного менее неуклюжий, более реляционный и немного легче расширить ...
SELECT
TestDB.HId, TestDB.TestM, TestDB.*
FROM
TestDB
INNER JOIN
(
SELECT 4 AS val, 1 AS ordinal
UNION ALL SELECT 5 AS val, 2 AS ordinal
UNION ALL SELECT 7 AS val, 3 AS ordinal
UNION ALL SELECT 8 AS val, 4 AS ordinal
UNION ALL SELECT 1 AS val, 5 AS ordinal
UNION ALL SELECT 132 AS val, 6 AS ordinal
UNION ALL SELECT 312 AS val, 7 AS ordinal
)
filter
ON filter.value = TestDB.HId
ORDER BY
filter.ordinal
необходимо создать колонку для заказа. нет сортировки по умолчанию, поскольку SQL не гарантированно возвращает результаты в последовательном порядке без предложения order by. – Jeremy