Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом (набор столбцов в один столбец) / 25 сообщений из 27, страница 1 из 2
24.01.2017, 11:25
    #39390125
_гость__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
есть табличка вида id, paper1, paper2, paper3

каким образов сгруппировать все paper1-3 в один столбец и получить общий список?

(c union можно, но хотелось бы пооптимальнее)
...
Рейтинг: 0 / 0
24.01.2017, 12:51
    #39390206
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
_гость__,

Оптимальнее - UNION ALL
...
Рейтинг: 0 / 0
24.01.2017, 13:11
    #39390226
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
_гость__,

Создаем процедуру
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or alter procedure get_rows (
    n integer)
returns (
    num integer)
AS
begin
  num = 0;
  while (num < n) do
  begin
    num = num+1;
    suspend;
  end
end


Код: sql
1.
2.
3.
select p.id, decode(r.num, 1, p.id_paper1, 2, p.id_paper2, 3, p.id_paper3) id_paper
from papers p
cross join get_rows(3) r


Правда, насчет оптимальности надо эксперементировать
...
Рейтинг: 0 / 0
24.01.2017, 13:53
    #39390265
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Шавлюк Евгений, можно и без процедуры
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH RECURSIVE
rc AS
(
  SELECT id, paper1 AS paper, Cast(0 AS SMALLINT) AS nestlvl
    FROM papers
  UNION ALL
  SELECT rc.id, Decode(rc.nestlvl, 0, paper2, 1, paper3) AS paper,
      nestlvl + 1 AS nestlvl
    FROM rc
      INNER JOIN papers t ON t.id = rc.id
    WHERE rc.nestlvl < 2
)
SELECT id, paper
  FROM rc
...
Рейтинг: 0 / 0
24.01.2017, 14:01
    #39390268
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
rdb_dev,

Зачем так сложно с рекурсией? Проще 3 union
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with
 nums as (select 1 num from rdb$database
          union all
          select 2 from rdb$database
          union all
          select 3 from rdb$database)
select p.id, decode(r.num, 1, p.id_paper1, 2, p.id_paper2, 3, p.id_paper3) id_paper
from papers p
cross join nums r
...
Рейтинг: 0 / 0
24.01.2017, 14:07
    #39390275
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Шавлюк Евгений, тоже вариант.
...
Рейтинг: 0 / 0
24.01.2017, 14:14
    #39390280
_гость__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
взрыв мозга с рекурсией и cross join ;)
...
Рейтинг: 0 / 0
24.01.2017, 14:31
    #39390300
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
_гость__, не, ну а как ты хотел?

_гость__но хотелось бы пооптимальнееКакая постановка задачи, такие и решения...
...
Рейтинг: 0 / 0
24.01.2017, 14:43
    #39390311
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Я в шоке. Ну кто же так гланды через ж... удаляет? Смотрите, как надо!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create procedure query_result returns (id int,
    paper int) -- или какого оно там типа
AS
declare variable paper2 int; -- с типом аналогично
declare variable paper3 int;
begin
  for select id, paper1, paper2, paper3
    into :id, :paper, :paper2, :paper3
  do begin
    suspend;
    paper = paper2;
    suspend;
    paper = paper3;
    suspend;
  end
end
...
Рейтинг: 0 / 0
24.01.2017, 15:02
    #39390329
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
WildSery, это первое, что пришло в голову, но, как-то, не стыковалось с определением "пооптимальнее" и решил - раз уж дёргать гланды ректально, то рекурсией.
...
Рейтинг: 0 / 0
24.01.2017, 15:21
    #39390347
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
rdb_dev,

Чтение данных с диска - самое долгое. А пару лишних саспенд выплюнуть это фигня.
...
Рейтинг: 0 / 0
24.01.2017, 15:25
    #39390349
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
[offtop]
WildSery, полагаю, для "пооптимальнее" в ФБ не хватает типа данных в виде индексированного набора строк, что-то типа:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE query_result
  RETURNS ROWSET AS
  (
    id int REFERENCES papers (id) USING INDEX "papers__pk",
    paper int,  -- или какого оно там типа
  )
AS
<далее_по_тексту...>
...
Рейтинг: 0 / 0
24.01.2017, 15:27
    #39390353
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
rdb_dev,

И в чём будет отличие?
...
Рейтинг: 0 / 0
24.01.2017, 15:32
    #39390357
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
WildSery, в возможности использования индекса в планах запроса при связывании полученных из ХП данных.
...
Рейтинг: 0 / 0
24.01.2017, 15:33
    #39390360
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
rdb_dev> в ФБ не хватает типа данных в виде индексированного набора строк

А такое где-то есть?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.01.2017, 15:37
    #39390366
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Гаджимурадов Рустам, не знаю.
...
Рейтинг: 0 / 0
24.01.2017, 15:39
    #39390367
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
rdb_dev,

садись 2. Где тут про индексы (JOIN/фильтрацию и т.д.) вообще сказано было? Методы соединения хорошо знаешь?
...
Рейтинг: 0 / 0
24.01.2017, 15:39
    #39390368
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Т.е. ты пукнул в лужу (с) Раневская.

Молодец.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.01.2017, 15:41
    #39390370
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Гаджимурадов Рустам,

при желании процедура заливает в GTT на которой висят индексы, а дальше используй себе GTT
...
Рейтинг: 0 / 0
24.01.2017, 15:41
    #39390372
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Симонов Денисrdb_dev, Методы соединения хорошо знаешь?Нормально
...
Рейтинг: 0 / 0
24.01.2017, 15:43
    #39390375
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Симонов Денис, да, можно и в GTT залить, а вместо FK использовать обычный индекс.
...
Рейтинг: 0 / 0
24.01.2017, 15:44
    #39390376
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Симонов Денис> при желании

При желании можно лужу не портить, конечно.
Но когда говорят - вот такого типа не хватает
(с аццким синтаксисом и которого нигде нет) -
возникают смутные сомнения (с) И.В.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.01.2017, 15:48
    #39390383
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Гаджимурадов Рустам, что там такого "аццкого" в синтаксисе? Синтаксис внутри скобок такой же, как у CREATE TABLE.
...
Рейтинг: 0 / 0
24.01.2017, 16:06
    #39390408
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
rdb_dev> что там такого "аццкого" в синтаксисе?

То, что индексированный НД должен быть для
всего, а не только для ХП. И что у тебя значит
"papers__pk" - имя существующего индекса?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.01.2017, 17:32
    #39390501
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом (набор столбцов в один столбец)
Сдаётся мне, что соединение с UNION ALL индекс будет использовать куда эффективнее рекурсии и чего бы то ни было.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом (набор столбцов в один столбец) / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]