2011-01-14 2 views
2

У меня есть инструкции SQL:SQL выберите заявление

SELECT * 
    FROM users 
WHERE username = 'bbb' 
    OR username = 'aaa' 
    OR username = 'ddd' 
    OR username = 'ccc' 

В таблице ДДД имеет самый большой идентификатор, чем ссс БББ, чем ааа.

Теперь, когда он возвращает результаты, он всегда сортирует их по id как: aaa, bbb, ccc, ddd. Но я хочу, чтобы они оставались в том же порядке, в которые я их ввел: bbb, aaa, ddd, ccc.

Может ли кто-нибудь помочь мне с решением?

ответ

7

В SQL порядок поиска не указан, если вы не запрашиваете его с помощью ORDER BY. Если вы хотите сохранить введенный вами заказ, добавьте прогрессивный столбец ROW_NUMBER и попросите его о нем.

+0

Некоторые базы данных имеют настройки по умолчанию, на которые вы не должны полагаться, но которые тем не менее присутствуют. Например, таблица MySQL InnoDB будет возвращать результаты, упорядоченные по возрастанию 'PRIMARY KEY' по умолчанию. – dkarp

4
select * from users where username='bbb' 
UNION 
select * from users where username='aaa' 
UNION 
select * from users where username='ddd' 
UNION 
select * from users where username='ccc' 

Несмотря на то, что этот запрос может достичь того, чего вы хотите, а пользователь 6502 заявил, что заказ еще не определено в этом запросе, и поэтому вы не можете безопасно зависеть от его возвращения как таковой через разные реализации.

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

select * from users where username in ('aaa', 'bbb', 'ccc', 'ddd', 'ccc') 
+0

lol Просто потому, что вы * можете * не означает, что вы должны: D –

+0

Да, я согласен, что это любопытное извращение. –

+0

i get «Тип текстовых данных не может быть выбран как DISTINCT, потому что он не сопоставим». если я использую union – hhh3112

1

Если у вас есть столбец «ID» в таблице пользователей (ДДД, имеющие «самый большой идентификатор»), то вы можете сделать что-то вроде этого:

select * from users where username in ('aaa','bbb','ccc','ddd') 
order by id; 

ETA: Если столбец идентификатора находится в другой таблице, то вам придется выполнить объединение, чтобы получить правильные идентификаторы ,