Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

26.06.2008, 00:23
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Нетривиальные задачи Sql
Предлагаю выкладывать в данной теме интересные, неоднозначные задачки, заставляющие моск пошевилиться 
Новичкам будет полезно почитать и поучится, а ветеранам в этом нелегком деле - поулучшать и попредлагать свои варианты решения.
Для примера приведу задачку, котороя мне сегодня попалась (друг спросил):
Есть таблица, назовем ее tbl, в ней 2 столбца: st1 и st2. В каждом из столбцов какой то набор букв.
К примеру:
Код:
--------------------
tbl
--------------------
st1 | st2
--------------------
a | e
d | g
r | k
Так вот - необходимо НЕ используя UNION получить в результирующей выборке содержимое 2-х столбцов в одном столбце, упорядоченным по возрастанию.
Т.е.
Код:
---------
result
---------
a
d
e
g
k
r
Запрос вовсе не сложный, но если сразу не догадаться как решать - можно потратить некоторое время на обдумывание
Не было - ну да ладн
Код:
CREATE TABLE `tst` (
`st1` varchar(1) NOT NULL,
`st2` varchar(1) NOT NULL
);
INSERT INTO `tst` (`st1`, `st2`) VALUES
('a', 'e'),
('d', 'g'),
('r', 'k');
Последний раз редактировалось VDShark; 26.06.2008 в 00:55..
Причина: По просьбе трудящихся +)
|
|
|

26.06.2008, 00:38
|
|
Leaders of Antichat - Level 4
Регистрация: 16.01.2006
Сообщений: 1,966
Провел на форуме: 21768337
Репутация:
3486
|
|
Кидай сразу код для создания таблицы и заполнения колонок. А то буковки впадлу переписывать
|
|
|

26.06.2008, 03:59
|
|
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме: 389768
Репутация:
158
|
|
Пойдет?
Код:
CREATE TEMPORARY TABLE temp TYPE=HEAP SELECT st1 as 'result' FROM tst;
INSERT INTO temp SELECT st2 FROM tst;
SELECT * FROM temp ORDER BY 'result' ASC;
DROP TABLE temp;
|
|
|

26.06.2008, 11:25
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от Solker
Пойдет?
Код:
CREATE TEMPORARY TABLE temp TYPE=HEAP SELECT st1 as 'result' FROM tst;
INSERT INTO temp SELECT st2 FROM tst;
SELECT * FROM temp ORDER BY 'result' ASC;
DROP TABLE temp;
Ну.... Никакого полета фантазии 
Давай без временных таблиц.
Тем более что это все сделать необходимо одним запросом.
|
|
|

26.06.2008, 14:58
|
|
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме: 3887520
Репутация:
2996
|
|
подзапросы тоже нельзя?
|
|
|

26.06.2008, 15:33
|
|
Познающий
Регистрация: 22.04.2008
Сообщений: 32
Провел на форуме: 137918
Репутация:
56
|
|
Использовать представления (VIEW), хранимые функции...?
Собственно эти объекты и предназначены для решения проблем такого рода.
Последний раз редактировалось z3r0cool; 26.06.2008 в 16:21..
|
|
|

26.06.2008, 16:50
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от [ cash ]
подзапросы тоже нельзя?
Можно. Хотя я без них решил
Сообщение от z3r0cool
Использовать представления (VIEW), хранимые функции...?
Собственно эти объекты и предназначены для решения проблем такого рода.
Нет-нет-нет и еще раз нет... Тем более в основе представления так же лежит запрос - какая собственно разница? А в хп обычно группа запросов. Я ж написал - ЗАПРОС... 1 запрос. Ну максимум с подзапросами. А вы тут начали уже городить =)
На самом деле запрос достаточно легкий... главное догадаться каким путем идти.
Последний раз редактировалось VDShark; 26.06.2008 в 17:00..
|
|
|

26.06.2008, 17:21
|
|
Флудер
Регистрация: 21.06.2006
Сообщений: 3,193
Провел на форуме: 12702287
Репутация:
4738
|
|
Сообщение от VDShark
На самом деле запрос достаточно легкий... главное догадаться каким путем идти.
Модифицировать исходную таблицу можно? Создавать дополнительные я так понял нельзя...
|
|
|

26.06.2008, 17:36
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от -=lebed=-
Модифицировать исходную таблицу можно? Создавать дополнительные я так понял нельзя...
Нет. Никаких DML и тп... Только запрос на выборку. Т.е. select и присущие ему конструкции: можно подзапросы, JOIN'ы, самосоединения и тп.
|
|
|

27.06.2008, 19:10
|
|
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме: 389768
Репутация:
158
|
|
На тему большинство забило, я же 3 дня листал мануалы на mysql.com.
Будте добрвы выскажите тогда пожалуйста наиболее оптимальное решение.
Очень интересно.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|