Parad1so
@Parad1so

SQL как связать 2 таблицы varchar + number?

Привет!!
В табличке есть список varchar через запятую типа
1,11,32,531
2, 44, 321
у каждого списка есть свои ID ,
а в другой таблице значения number с числами из списков которые выше с описанием
1 вася
11 петя
32 костя
531 дима
и тд
подскажите как связать две таблицы?
в итоге должно получиться:
1 вася ID (из таблицы выше)
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 4
@d-stream
Готовые решения - не подаю, но...
Как уже отметили - структура не очень...
Но иногда такое надо. И если это не одноразовая штука - то очень удобным будет сделать функцию, получающую на вход строку [+ параметр - символ разделителя] и возвращавшую таблицу с разобранными "циферками" из строки. Тогда можно будет использовать результат этой функции как одну из частей join например.
Ответ написан
Smithson
@Smithson
20+ лет админю
в смысле связать?
Вам надо что-то типа
select t1.id from t1, t2 where t1.s like "%" || CONVERT(t2.id) || "%" ?

Но вообще у вас в корне неверная структура таблиц.
Ответ написан
@x_shader
Oracle & Coffee
with great_design_tab as (
  select 700 as id, '1,11,32,531' as ass_pain from dual union all
  select 701 as id, '2, 44, 321' as ass_pain from dual
)
,usrs as (
  select 1 as id, 'вася' as username from dual union all
  select 11 as id, 'петя' as username from dual union all
  select 32 as id, 'костя' as username from dual union all
  select 531 as id, 'дима' as username from dual union all
  select 2 as id, 'жора' as username from dual union all
  select 44 as id, 'изя' as username from dual union all
  select 321 as id, 'семен' as username from dual
)
select u.id, u.username, t.id
  from usrs u
      ,great_design_tab t
      ,lateral (
                select level x from dual 
                connect by regexp_substr(ass_pain, '[^,]+', 1, level) is not null
               )
 where u.id = trim(regexp_substr(ass_pain,'[^,]+', 1, x));


ID USERNAME         ID
---------- -------- ----------
         1 вася            700
        11 петя            700
        32 костя           700
       531 дима            700
         2 жора            701
        44 изя             701
       321 семен           701
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы