powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как соединить две таблицы (ORACLE)
25 сообщений из 25, страница 1 из 1
Как соединить две таблицы (ORACLE)
    #39859469
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заполнить колонку D данными из B, первые символы A и C равны, но количество одинаковых символов меняется
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859485
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите хоть что-то, сделанное вами, чтобы появилось желание вам помогать.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t(a, b, c, d) as (
select 'qwe', 'ert', 'etr', null from dual union all
select 'wea', 'egf', 'ocr', null from dual union all
select 'ety', 'ret', 'abc', null from dual union all
select 'ews', 'rat', 'qqq', null from dual union all
select 'zxc', 'root', 'zzz', null from dual
)
select a, substr(a, 1, 1) a1, b, c, d from t



Студентам, желающим помощи .
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859488
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609заполнить колонку D данными из B, первые символы A и C равны, но количество одинаковых символов меняется

Кто нибудь хоть что нибудь понял?
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859491
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При выполнении условия key-preserved rows - update по динамическому представлению.
Иначе - merge statement (для версий сервера, поддерживающих merge)
Универсально - PL/SQL.
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859492
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609,
А количество меняется в сторону увеличения или в сторону уменьшения ?

Regards

Maxim
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859533
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,
Извиняюсь, фото не загрузилось
Таб1
A B
750 ccc
750 ccc
26 qq
3450 tt
12 yy

Таб2
C D
750443
7503
2620
2645
345046
34506653
1265

Результат:
Таб2
C D
750443 ccc
7503 ccc
2620 qq
2645 qq
345046 tt
34506653 tt
1265 yy
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859611
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevКто нибудь хоть что нибудь понял?
Понял, автор топика канадец у них канабис легализован
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859669
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevКто нибудь хоть что нибудь понял?
1)есть две таблички
tab1(a varchar2(20),b varchar2(20))
tab2(c varchar2(20),d varchar2(20))

2) в таблічке 2 заполнить поле d значением b при условии "максимального" like
напр
Таб1
A B
750 ccc
7504 ччч

Таб2
C D
750 null
750443 null

результат
Таб2
C D
750 ccc
750443 ччч

.....
stax
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859676
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevchris0609заполнить колонку D данными из B, первые символы A и C равны, но количество одинаковых символов меняется

Кто нибудь хоть что нибудь понял?

авторвот ещё нам вчера новую игру привезли, э-э-э.., "Стимулируй сам". Очень интересно.
— А как в неё играть?
— Там всё написано в объяснении. "Трое играющих берут четыре фишки, причём пятый игрок всё время выкидывает... После того как лиса оказывается съеденной, она делает четыре хода назад..."
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859678
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SQL> ed
Wrote file afiedt.buf

  1  with tab1(a,b) as (
  2  select '750','ccc' from dual union all
  3  select '7504','xxx' from dual union all
  4  select '26','qq' from dual union all
  5  select '3450','tt' from dual union all
  6  select '12','yy' from dual)
  7  ,tab2 (c) as (
  8  select '750443' from dual union all
  9  select '7503' from dual union all
 10  select '2620' from dual union all
 11  select '2645' from dual union all
 12  select '345046' from dual union all
 13  select '34506653' from dual union all
 14  select '1265' from dual
 15  )
 16  select
 17    t2.c
 18   ,(select max(b) KEEP (DENSE_RANK LAST ORDER BY length(t1.a))
 19     from tab1 t1 where t2.c like t1.a||'%') d
 20* from tab2 t2
SQL> /

C        D
-------- ---
750443   xxx
7503     ccc
2620     qq
2645     qq
345046   tt
34506653 tt
1265     yy

7 rows selected.



....
stax
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859776
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таб1
..A.......................B
750....................aaa
750....................aaa
26......................bbb
3450..................ccc
3450..................ccc
12......................q
12......................q


Таб2
....C....................D
7503546
75043111
7507895
7501478
264545
26777
26147
34506273
3450543
128887
1294387


Результат:
.....C...................D
7503546............aaa
75043111...........aaa
7507895............aaa
7501478............aaa
264545..............bbb
26777................bbb
26147................bbb
34506273..........ccc
3450543............ccc
128887..............q
1294387............q
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859788
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смахивает на билинг звонков, типа, по префиксу надо найти прайс.
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859800
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chris0609,

чем не устраивает 21967446 ?

....
stax
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859803
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg M.IvanovСмахивает на билинг звонков, типа, по префиксу надо найти прайс.
Не дописал сразу, дополню.
В таком случае курсором тянем значения из C и каждое число в цикле обрезаем с хвоста до тех пор, пока не найдется совпадение в А.
Так обычно билинги работают, задача очень похожа, но одним селектом не решить.
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859848
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg M.IvanovВ таком случае курсором тянем значения из C и каждое число в цикле обрезаем с хвоста до тех пор, пока не найдется совпадение в А.
Так обычно билинги работают
...иногда лучше молчать...
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859859
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Код: plsql
1.
2.
3.
4.
5.
SQL>  16  select
 17    t2.c
 18   ,(select max(b) KEEP (DENSE_RANK LAST ORDER BY length(t1.a))
 19     from tab1 t1 where t2.c like t1.a||'%') d
 20* from tab2 t2




Проще надо быть :)
Вешаем индекс на tab1(a,b)
nls_sort, nls_comp в binary не забываем и:
Код: plsql
1.
2.
3.
select c,d 
 from tab2
    , lateral(select b D from tab1 where a<=c order by a desc fetch first 1 row only)



Лет несколько назад очень популярная тема была, причем в те годы вариант с единственным фетчем курсора в pl/sql брал верх над чисто-sql решениями...
Плюс Саян отличный обзор методов получения top-n (top-1 в данном случае) публиковал.

Однако ТС, судя по косвенным, хочет merge в tab2, а не просто join.
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859880
Oleg M.Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
create table tab1 ( a  number, b  varchar2(10));
create index idx_a on tab1(a);
insert into tab1 (a, b) values (750, 'aaa');
insert into tab1 (a, b) values (750, 'aaa');
insert into tab1 (a, b) values (26, 'bbb');
insert into tab1 (a, b) values (3450, 'ccc');
insert into tab1 (a, b) values (3450, 'ccc');
insert into tab1 (a, b) values (12, 'q');
insert into tab1 (a, b) values (12, 'q');
commit;

create table tab2( c  number, d  varchar2(10));

insert into tab2(c) values (7503546);
insert into tab2(c) values (75043111);
insert into tab2(c) values (7507895);
insert into tab2(c) values (7501478);
insert into tab2(c) values (264545);
insert into tab2(c) values (26777);
insert into tab2(c) values (26147);
insert into tab2(c) values (34506273);
insert into tab2(c) values (3450543);
insert into tab2(c) values (128887);
insert into tab2(c) values (1294387);
commit;

declare
v_c  number;
v_d  varchar2(10);
v_r rowid;
i number;
cursor v_cursor is 
select rowid,c from tab2;

 begin
  open v_cursor;
 loop
  begin
   fetch v_cursor into v_r,v_c;
   i:=length(v_c);
   v_d:=null;
   
   while i>1 and v_d is null loop 
             --dbms_output.put_line(v_c);
        begin     
        select nvl(b,0) into v_d from tab1 where a=v_c and rownum<2;
          exception when others then null;   
        end;
        i:=i-1;      
        v_c:= substr(v_c,1,i);
   end loop;
   if v_d is not null then
     begin
      update tab2 set d=v_d where rowid=v_r;
     end;
   end if;
  end; 
     exit when v_cursor%NOTFOUND;
   end loop;
  close v_cursor;
 end;    

describe tab2;


CD7503546aaa75043111aaa7507895aaa7501478aaa264545bbb26777bbb26147bbb34506273ccc3450543ccc128887q1294387q
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859888
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg M.Ivanov
Код: plsql
1.
cursor

Сам по себе гуано-код, отягощённый говнокодищем:
Oleg M.Ivanov
Код: plsql
1.
when others then null;

и бездарностью:
Oleg M.Ivanov
Код: plsql
1.
2.
     exit when v_cursor%NOTFOUND;
   end loop;
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859894
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousПроще надо быть :)
...
Однако ТС, судя по косвенным, хочет merge в tab2, а не просто join.
можно и так
пока нету у меня латерала
я специально подзапросиком делал, мож пригодится для update (заполнить колонку D)

.....
stax
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859903
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg M.Ivanov
Код: plsql
1.
   while i>1 and v_d is null loop 




Олег, ну попробуйте немного подумать...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare
  type ta_dic is table of varchar2(20) index by varchar2(30);
  la_dic ta_dic;
  l_idx varchar2(30);
  cursor c_data is 
    select c from tab2 
     where d is null 
       for update;
 begin
   -- готовим ассоциативный справочник
   for i in (select a,b from tab1) loop
     la_dic(i.a) := i.b;
   end loop;
   -- крутим наждак:
   for i in c_data loop
     l_idx := la_dic.prior(i.c);
     if instr(i.c,l_idx) = 1 then
       update dropme_t2 
          set d = la_dic(l_idx) 
        where current of c_data
       ;
     end if;
   end loop;
end;
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859908
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousОлег, ну попробуйте
А если Вы имели ввиду потроллить ТС, то
Код: plsql
1.
2.
3.
4.
5.
6.
begin
  for i in (select * from tab1 order by length(a)) loop
    update tab2 set d=i.b
     where c like i.a||'%';
  end loop;
end;
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859909
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxподзапросиком делал, мож пригодится для update (заполнить колонку D)
Опасная это тема, подзапросик в update.
Неофитов надо про where предупреждать, во избежание потери данных.
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859936
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxподзапросиком делал, мож пригодится для update (заполнить колонку D)
Опасная это тема, подзапросик в update.
Неофитов надо про where предупреждать, во избежание потери данных.


ето скорее лаба, не реальная ж задача

тем более к постановке есть вопросы

напр a - 750, c - 754321, d должно попадать под замену?
если так то мое решение неполное (неверное)

зы
напр я б к where a<=c like добавил хотя б на первую букву и тд

.....
stax
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859961
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
спасибо
...
Рейтинг: 0 / 0
Как соединить две таблицы (ORACLE)
    #39859963
chris0609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, спасибо

select
t2.c
,(select max(b) KEEP (DENSE_RANK LAST ORDER BY length(t1.a))
from tab1 t1 where t2.c like t1.a||'%') d
from tab2 t2

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


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