Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

не могу разобраться с UNION

7.3K
11 октября 2006 года
JB13
64 / / 05.09.2005
Хочу задать два вопроса в одном топике.
Простая задача, но что-то не могу разобраться. Есть таблица, в которой есть некоторая колонка типа varchar, которая к тому же может принимать значение NULL. Нужно ее отсортировать, чтобы значения с NULL выводились в конце. OREDER BY сначала выводить записи с NULL, а затем все остальное. Собтвено это первый вопрос.

Попробовал это решить с помощь UNION, т.е. так
 
Код:
(select * from users where mail is not NULL order by mail)
UNION
(select * from users where mail is NULL);


но почему-то в первой части запроса order by не срабатывает, но если сделать так:

 
Код:
(select * from users where mail is not NULL order by mail limit 1000)
UNION
(select * from users where mail is NULL);


то все ок. почему?
10
11 октября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=JB13]OREDER BY сначала выводить записи с NULL, а затем все остальное. Собтвено это первый вопрос.[/QUOTE]
Сервер какой? В Oracle допустим синтаксис "order by mail nulls fisrt" или "nulls last". Не знаю, входит ли он в какой-либо стандарт.
7.3K
11 октября 2006 года
JB13
64 / / 05.09.2005
[QUOTE=Freeman]Сервер какой? В Oracle допустим синтаксис "order by mail nulls fisrt" или "nulls last". Не знаю, входит ли он в какой-либо стандарт.[/QUOTE]

Ссори, забыл. Сервер - MySQL.
"nulls first", "nulls last" - не работает :(
337
11 октября 2006 года
shine
719 / / 09.06.2006
[QUOTE=JB13]
 
Код:
(select * from users where mail is not NULL order by mail)
UNION
(select * from users where mail is NULL);


 
Код:
(select * from users where mail is not NULL order by mail limit 1000)
UNION
(select * from users where mail is NULL);


то все ок. почему?[/QUOTE]

order by должен применятся для всего UNION блока а не для каждой его части вотдельности:
 
Код:
(select * from users where mail is not NULL)
UNION
(select * from users where mail is NULL)
order by mail


почему у тебя работает вариант с limit - без понятия.
7.3K
11 октября 2006 года
JB13
64 / / 05.09.2005
Оказалось что у меня старый мануал. В версии по новее есть вот такой абзац:
Цитата:
ORDER BY for individual SELECT statements within parentheses only has an effect when combined with LIMIT. Otherwise, the ORDER BY is optimized away.



А как вывести записи с NULL после отсортированых, так и не нашел :(

337
12 октября 2006 года
shine
719 / / 09.06.2006
А сделать два отдельных запроса нельзя?
385
12 октября 2006 года
SomewherSomehow
477 / / 25.07.2004
можно извратиться так
 
Код:
SELECT * FROM mytable
order by
case when MyField is null then char(255) end,
case when MyField is not null then MyField end

Думаю идея понятна...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог