SQLite: ... КРОМЕ... ЗАКАЗАТЬ ПО СЛУЧАЙНОМУ ()

Этот запрос:

SELECT colour FROM ColourView EXCEPT SELECT colour FROM SkinColourExceptionsView WHERE race = 'Human' ORDER BY RANDOM() LIMIT 1

Создает следующее исключение: 1st ORDER BY term does not match any column in the result set

Тем не менее, изменение ORDER BY RANDOM() в ORDER BY colour способен выдавать результаты (отсортировано в алфавитном порядке по цвету, а не случайным образом). Следующее предполагает, что ORDER BY RANDOM() LIMIT 1 должно работать: выберите случайную строку из таблицы sqlite. Может кто-нибудь объяснить, почему мой запрос не работает?

1 ответ

Решение

В составном запросе термины ORDER BY должны соответствовать некоторому столбцу в наборе результатов.

Вы можете обойти это ограничение, переместив составной запрос в подзапрос:

SELECT colour
FROM (SELECT colour FROM ColourView
      EXCEPT
      SELECT colour FROM SkinColourExceptionsView WHERE race = 'Human')
ORDER BY random()
LIMIT 1;

В качестве альтернативы, перепишите запрос, чтобы использовать другой механизм фильтрации:

SELECT colour
FROM ColourView
WHERE colour NOT IN (SELECT colour
                     FROM SkinColourExceptionsView
                     WHERE race = 'Human')
ORDER BY random()
LIMIT 1;
Другие вопросы по тегам