Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пристыковать 2 результата запроса в одну таблицу, mysql 5.5.16 
:(
    Опции темы
motorway
Дата 15.3.2012, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Имеется два запроса к одной таблице:
SELECT nomer_s-1 FROM `test` WHERE (nomer_s-1 NOT IN (SELECT nomer_s FROM `test`))
SELECT nomer_s+1 FROM `test` WHERE (nomer_s+1 NOT IN (SELECT nomer_s FROM `test`) AND nomer_s+1<10000);
Они возвращают числа.

Как объединить результаты запроса в одну таблицу из двух колонок, чтобы потом можно было для каждой строки результирующей таблицы сделать конкатенацию и получить уже третий столбец как результат? То есть, просто справа от результатов первой добавляем результаты второй в каждой строке.
JOIN с подзапросом что-то не срабатывает.

PM MAIL   Вверх
Akina
Дата 15.3.2012, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Т.е. надо найти такой номер, что у него нет "соседей", и он меньше 9999, верно?

Добавлено @ 21:36
если да, то
Код

select t1.n - 1, t1.n + 1
from tab t1
left join tab t2 on t2.n = t1.n - 1
left join tab t3 on t3.n = t1.n + 1
where t2.n is null and t3.n is null and t1.n < 9999



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 15.3.2012, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Тут более сложная ситуация, это по смыслу часть большего запроса.
Первый выдаёт нужные числа с некоторыми условиями, второй также нужные числа с другими условиями, а потом надо объединить полученные результаты в строку + возможно, придётся добавить ещё несколько строк к результату.
У вас пример с join - если бы таблица существовала, то это было бы легче, а тут таблица является результатом запроса. По сути должно быть что-то типа
Код

SELECT ... FROM ... WHERE ... LEFT JOIN (SELECT ... FROM ... WHERE ...)

PM MAIL   Вверх
Akina
Дата 15.3.2012, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Какой вопрос - такой ответ. Мой запрос решает поставленнную в инит-посте задачу? решает... интересует на самом деле что-то другое? ну так и спрашивайте что интересует...



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 15.3.2012, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



В общем виде интересовало, как объединить в 2 колонки результаты 2 запросов, для которых нет отдельных таблиц.
Попробовал с помощью CREATE TEMPORARY TABLE, а потом JOIN. Не совсем то, что нужно было, но насколько-то помогло.
В принципе уже не очень актуально, но на будущее...
PM MAIL   Вверх
Akina
Дата 16.3.2012, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(motorway @  16.3.2012,  00:21 Найти цитируемый пост)
как объединить в 2 колонки результаты 2 запросов, для которых нет отдельных таблиц.

Если в запросах есть поле, которое можно использовать для установления однозначного соответствия - нет проблем.
Скажем, с твоими запросами это будет
Код

select q1.n1, q2.n2
from
(
  SELECT nomer_s n, nomer_s-1 n1 
  FROM `test` 
  WHERE (nomer_s-1 NOT IN (SELECT nomer_s FROM `test`))
) q1
inner join
(
  SELECT nomer_s n, nomer_s+1 n2
   FROM `test`
  WHERE (nomer_s+1 NOT IN (SELECT nomer_s FROM `test`) AND nomer_s+1<10000)
) q2
on q1.n=q2.n



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 16.3.2012, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Спасибо. А если такого поля нет? Просто есть 2 результата запроса, и надо второй столбец приставить к первому.
Например:
Первый селект выдает
1
2
3
Второй - 
4
5
6
И получаем:
1 4 
2 5
3 6
PM MAIL   Вверх
Akina
Дата 16.3.2012, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(motorway @  16.3.2012,  14:53 Найти цитируемый пост)
 А если такого поля нет?

Обоснуйте, почему были объединены в одной записи значения 1 и 4. А не, например, 1 и 5...
При ответе помните, что понятий номера записи и порядка записей без явного указания сортировки - не существует.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 16.3.2012, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Должны объединяться записи в том порядке, как они идут в результатах запросов, а они там идут по возрастанию.
То есть, первое с первым, второе со вторым и т.п.
PM MAIL   Вверх
Akina
Дата 16.3.2012, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Значит, в запросах следует ввести дополнительное расчётное поле номера записи, и выполнять связывание по нему.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.