Как мне выбрать некоторые строки, а затем другие в MySQL?

#mysql #union

#mysql #объединение

Вопрос:

У меня есть этот запрос, он работает, но я не уверен, что это лучший подход, и я не получаю то, что хочу.

Мне нужно сначала выбрать запрос, содержащийся в предложении «IN», а затем объединить с другими. Вся возвращаемая строка должна быть 40.

 SELECT * 
FROM (
    SELECT * FROM tbl_x a WHERE id IN(11,20,30) 
    UNION ALL 
    SELECT * FROM tbl_x b WHERE exam_group='jpx' AND subject='chemistry'
) ab 
GROUP BY id LIMIT 40

 

Ответ №1:

Следующий запрос должен возвращать те же данные простым способом:

 SELECT * 
FROM tbl_x 
WHERE 
    id IN (11,20,30)
    OR (exam_group='jpx' AND subject='chemistry')
ORDER BY id IN (11,20,30) DESC, id
LIMIT 40;
 

Комментарии:

1. Это работает, но все еще очень похоже на мой собственный запрос. Если я установлю ОГРАНИЧЕНИЕ на 10, то он не будет получать запросы с идентификатором (11,20,30). Я просто получаю последовательный идентификатор 1-10.

2. Я отредактировал свой ответ, добавив ПОРЯДОК ПО инструкции. Смотрите упрощенный пример здесь: sqlize.online/…