2012-03-06 3 views
0

задач: Выбор указанной записи в верхней части списка результатовуказано запись в верхней части списка результатов

мой уродливый вариант:

(select * from mytable where id = 42) 
union all 
(select * from mytable where id != 42 order by id) 

Помимо ansi запроса вариант для mysql также будет очень интересно для меня

ответ

3

Там нет никакой разницы между ANSI и поставщика решений SQL

select * 
from mytable 
order by 
    CASE WHEN id = 42 THEN 0 ELSE 1 END, id 

Примечания: нет нет гарантирован или подразумеваемого заказ к столу или ВЫБРАТЬ без предложения ORDER BY

+0

Когда я начал писать свой ответ я довольно уверен, что вы редактировали свою и добавляли вторую часть; во всяком случае, вы были первыми (поддержаны), так что вы предпочитаете, чтобы я удалил свой ответ? Спасибо – Marco

+0

о первом запросе: почему так странные правила упорядочения '0, -n, ..., + m'? – triclosan

+0

@Marco: удалите, если хотите, но не было перекрытия – gbn

1

Предполагая, что идентификатор всегда положителен, попробуйте:

select * 
from mytable 
order by CASE WHEN id = 42 THEN 0 ELSE id END 
+0

Цистерны. Хотя в моем примере я выбрал PK, но наиболее распространенный запрос предпочтительнее для меня – triclosan

Смежные вопросы