Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Направьте на путь истинный / 8 сообщений из 8, страница 1 из 1
22.01.2018, 13:11
    #39588263
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направьте на путь истинный
Добрый день. Прошу совета.
Имеются две таблицы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with 
  tbl_1 as
 (select 1 as id, 1 as any_id from dual union all
  select 2, 1 from dual union all
  select 3, 3 from dual union all
  select 4, 2 from dual union all
  select 5, 2 from dual union all
  select 6, 2 from dual union all
  select 7, 6 from dual),
  tbl_2 as
 (select 1 as any_id, 100 as value from dual union all
  select 1, 150 from dual union all
  select 2, 250 from dual union all
  select 2, 250 from dual union all
  select 2, 260 from dual union all
  select 3, 325 from dual union all
  select 4, 444 from dual)


Как организовать выборку, объединив таблицы по any_id(1 к 1), чтобы в итоге получить
id any_id value
1 1 100
2 1 150
3 3 325
4 2 250
5 2 250
6 2 260
7 6

Джойны не канают что-то или понедельник слишком тяжелый...
...
Рейтинг: 0 / 0
22.01.2018, 13:15
    #39588270
Направьте на путь истинный
шК0ДЕР,

join on row_number() over()
...
Рейтинг: 0 / 0
22.01.2018, 13:18
    #39588273
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направьте на путь истинный
шК0ДЕРобъединив таблицы по any_id(1 к 1),STFF соединение по порядковому номеру
...
Рейтинг: 0 / 0
22.01.2018, 14:53
    #39588410
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направьте на путь истинный
шК0ДЕР,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with 
  tbl_1 as
 (select 1 as id, 1 as any_id from dual union all
  select 2, 1 from dual union all
  select 3, 3 from dual union all
  select 4, 2 from dual union all
  select 5, 2 from dual union all
  select 6, 2 from dual union all
  select 7, 6 from dual),
  tbl_2 as
 (select 1 as any_id, 100 as value from dual union all
  select 1, 150 from dual union all
  select 2, 250 from dual union all
  select 2, 250 from dual union all
  select 2, 260 from dual union all
  select 3, 325 from dual union all
  select 4, 444 from dual)
select t1.id, t1.any_id, t2.value from (select t1.*
,  row_number() OVER (partition by any_id order by id) as rn from tbl_1 t1) t1 
join (select t2.* ,  row_number() OVER (partition by any_id order by any_id) as rn from tbl_2 t2) t2 on t1.any_id = t2.any_id and t1.rn = t2.rn
order by t1.id
...
Рейтинг: 0 / 0
22.01.2018, 15:01
    #39588420
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направьте на путь истинный
Dshedoo,

авторчтобы в итоге получить
-
id any_id value
1 1 100
2 1 150
3 3 325
4 2 250
5 2 250
6 2 260
7 6

....
stax
...
Рейтинг: 0 / 0
22.01.2018, 16:42
    #39588560
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направьте на путь истинный
Добрый Э - Эхjoin on row_number() over()
ElicSTFF соединение по порядковому номеру
спасибо
...
Рейтинг: 0 / 0
22.01.2018, 16:45
    #39588564
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направьте на путь истинный
Dshedoo, почти верно. С LEFT JOIN`ом будет правильно
...
Рейтинг: 0 / 0
22.01.2018, 17:15
    #39588586
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Направьте на путь истинный
шК0ДЕР,

full outer join

ps
tbl_1 меньше строк

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Направьте на путь истинный / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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