ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Нетривиальные задачи Sql
  #1  
Старый 26.06.2008, 00:23
VDShark
Участник форума
Регистрация: 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.. Причина: По просьбе трудящихся +)
 
Ответить с цитированием

  #2  
Старый 26.06.2008, 00:38
.Slip
Leaders of Antichat - Level 4
Регистрация: 16.01.2006
Сообщений: 1,966
Провел на форуме:
21768337

Репутация: 3486


По умолчанию

Кидай сразу код для создания таблицы и заполнения колонок. А то буковки впадлу переписывать
__________________
..
 
Ответить с цитированием

  #3  
Старый 26.06.2008, 03:59
Solker
Участник форума
Регистрация: 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;
 
Ответить с цитированием

  #4  
Старый 26.06.2008, 11:25
VDShark
Участник форума
Регистрация: 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;
Ну.... Никакого полета фантазии
Давай без временных таблиц.
Тем более что это все сделать необходимо одним запросом.
 
Ответить с цитированием

  #5  
Старый 26.06.2008, 14:58
guest3297
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме:
3887520

Репутация: 2996


По умолчанию

подзапросы тоже нельзя?
 
Ответить с цитированием

  #6  
Старый 26.06.2008, 15:33
z3r0cool
Познающий
Регистрация: 22.04.2008
Сообщений: 32
Провел на форуме:
137918

Репутация: 56
Отправить сообщение для z3r0cool с помощью ICQ
По умолчанию

Использовать представления (VIEW), хранимые функции...?
Собственно эти объекты и предназначены для решения проблем такого рода.

Последний раз редактировалось z3r0cool; 26.06.2008 в 16:21..
 
Ответить с цитированием

  #7  
Старый 26.06.2008, 16:50
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Цитата:
Сообщение от [ cash ]  
подзапросы тоже нельзя?
Можно. Хотя я без них решил

Цитата:
Сообщение от z3r0cool  
Использовать представления (VIEW), хранимые функции...?
Собственно эти объекты и предназначены для решения проблем такого рода.
Нет-нет-нет и еще раз нет... Тем более в основе представления так же лежит запрос - какая собственно разница? А в хп обычно группа запросов. Я ж написал - ЗАПРОС... 1 запрос. Ну максимум с подзапросами. А вы тут начали уже городить =)

На самом деле запрос достаточно легкий... главное догадаться каким путем идти.

Последний раз редактировалось VDShark; 26.06.2008 в 17:00..
 
Ответить с цитированием

  #8  
Старый 26.06.2008, 17:21
-=lebed=-
Флудер
Регистрация: 21.06.2006
Сообщений: 3,193
Провел на форуме:
12702287

Репутация: 4738


По умолчанию

Цитата:
Сообщение от VDShark  
На самом деле запрос достаточно легкий... главное догадаться каким путем идти.
Модифицировать исходную таблицу можно? Создавать дополнительные я так понял нельзя...
 
Ответить с цитированием

  #9  
Старый 26.06.2008, 17:36
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Цитата:
Сообщение от -=lebed=-  
Модифицировать исходную таблицу можно? Создавать дополнительные я так понял нельзя...
Нет. Никаких DML и тп... Только запрос на выборку. Т.е. select и присущие ему конструкции: можно подзапросы, JOIN'ы, самосоединения и тп.
 
Ответить с цитированием

  #10  
Старый 27.06.2008, 19:10
Solker
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме:
389768

Репутация: 158
По умолчанию

На тему большинство забило, я же 3 дня листал мануалы на mysql.com.
Будте добрвы выскажите тогда пожалуйста наиболее оптимальное решение.
Очень интересно.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обнаружение Sql инъекций в Oracle, часть первая k00p3r Чужие Статьи 1 12.07.2005 08:51
Обнаружение Sql инъекций в Oracle, часть вторая k00p3r Чужие Статьи 0 13.06.2005 11:26
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ