Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск значения из одного столбца в другом столбце  [new]
gni
Member

Откуда: Прага
Сообщений: 10
Всем привет,

может кто поможет, такая проблема. Две таблицы, в одной (тбл. А) колонка содержащая следующее: \12345\123456\12344\1238
Во второй (тбл. Б) просто номер 1234. Обе таблицы связаны по ID, т.е. к одному номеру 1234 есть только одна такая вот хре*ь \12345\123456\12344\1238

Так вот, возможно ли рекурсивно искать принадлежность новеров из тбл. Б в тбл. А, т.е. 1234 должно быть в \12345\123456\12344\1238

Спасибо за любой совет
9 фев 12, 17:19    [12064613]     Ответить | Цитировать Сообщить модератору
 Re: Поиск значения из одного столбца в другом столбце  [new]
aleks2
Guest
gni
в одной (тбл. А) колонка содержащая следующее: \12345\123456\12344\1238

1. Если всеж это КОЛОНКА, и
12345
123456
12344
1238

то учите JOIN.

2. Если дело хуже и это строка '12345\123456\12344\1238', то учите CHARINDEX и JOIN.
10 фев 12, 05:49    [12066834]     Ответить | Цитировать Сообщить модератору
 Re: Поиск значения из одного столбца в другом столбце  [new]
Добрый Э - Эх
Guest
gni,

не совсем тебя понял, но может ты что-то типа такого хотел:
with
  A as
    (
      select '\12345\123456\12344\1238' as x_str union all
      select '\9766\459963\2342444\234' as x_str
    ),
  B as
    (
      select 1234 as x_num
    )
select *
  from A
  join B
    on A.x_str like '%' + cast(B.x_num as varchar) + '%'

Query finished, retrieving results...

           STR             NUM
------------------------   ----
\12345\123456\12344\1238   1234

1 row(s) retrieved
10 фев 12, 06:21    [12066841]     Ответить | Цитировать Сообщить модератору
 Re: Поиск значения из одного столбца в другом столбце  [new]
gni
Member

Откуда: Прага
Сообщений: 10
Привет,

спасибо за советы. Буду учить WITH и CHARINDEX,

Добрый Э - Эх, выглядит вроде как правильно, но к сожалению, знаний моих еше пока не хватает полностью понять, что же ты там творишь за чудеса :)

И для полноты

А Б
=========================| |=========================|
ID | Path | |ID | Number |
=========================| |=========================|
1 | 87654/456789/12345/654321 | 1 | 12345 |
2 | 15975/123312/456987/124477 | 2 | 99998 |
3 | 87412/965874/456322/423331 | 3 | 54321 |
========================== ==========================

ну и собственно узнать, есть ли 12345 (из таблицы Б) в колонке Path (таблицы А) где Id 1, и далее есть ли 99998 (тбл. Б) в колонке Path (таблицы А) где Id 2 итд
И все равно на каком месте. Просто есть ли или нету такой номер в пути/Path.

JOIN-ом то я свяжу обе таблицы. А вот как искать string из одной таблице в другой не зная.
10 фев 12, 18:52    [12071850]     Ответить | Цитировать Сообщить модератору
 Re: Поиск значения из одного столбца в другом столбце  [new]
gni
Member

Откуда: Прага
Сообщений: 10
извеняюсь, пришлось переделать таблицу, так как форум не позволюет делать пробелы, и редактировать тоже


.........................А....................................................... Б................................
=========================|..|=========================|
...ID... |................ Path.....................|...|..ID.....|........... Number.................... |
=========================| |=========================|
1.....| 87654/456789/12345/654321 ....| .......1....|............. 12345.................... |
2.....| 15975/123312/456987/124477...| .......2....|.............. 99998.................... |
3.....| 87412/965874/456322/423331...| .......3....|...............54321.................... |
========================== ==========================
10 фев 12, 18:57    [12071876]     Ответить | Цитировать Сообщить модератору
 Re: Поиск значения из одного столбца в другом столбце  [new]
Добрый Э - Эх
Guest
Если тебе всё же нужно джойнить по ID и проверять вхождение одного в другое, то, вот так попробуй:
with
--
-- Тестовые данные таблицы А:
  A as
    (
      select 1 as id, '87654/456789/12345/654321' as path union all
      select 2 as id, '15975/123312/456987/124477' as path union all
      select 3 as id, '87412/965874/456322/423331' as path
    ),
--
-- Тестовые данные таблицы В:  
  B as
    (
      select 1 as id, 12345 as num union all
      select 2 as id, 99998 as num union all
      select 3 as id, 54321 as num
    )
--
-- Основной запрос:    
select A.id, A.path, B.id, B.num,
       case 
         when CHARINDEX(cast(B.num as varchar),A.path) > 0 then 'B.num входит в A.path'
         else 'B.num НЕ входит в A.path'
       end as flag1,
       case 
         when A.path like '%' + cast(B.num as varchar) + '%' then 'B.num входит в A.path'
         else 'B.num НЕ входит в A.path'
       end flag2
  from A
  join B
    on A.id = B.id;
    

id            path              id   num           flag1                       flag2
--  --------------------------  --  -----   ------------------------   -----------------------
1   87654/456789/12345/654321   1   12345   B.num входит в A.path      B.num входит в A.path
2   15975/123312/456987/124477  2   99998   B.num НЕ входит в A.path   B.num НЕ входит в A.path
3   87412/965874/456322/423331  3   54321   B.num НЕ входит в A.path   B.num НЕ входит в A.path
10 фев 12, 20:41    [12072301]     Ответить | Цитировать Сообщить модератору
 Re: Поиск значения из одного столбца в другом столбце  [new]
aleks2
Guest
Добрый Э - Эх
Если тебе всё же нужно джойнить по ID и проверять вхождение одного в другое, то, вот так попробуй:
         when CHARINDEX(cast(B.num as varchar),A.path) 


1. Плохому учишь.

2. Нада так

select A.id, A.path, B.id, B.num,
case
when CHARINDEX('\'+cast(B.num as varchar(32))+'\', '\'+A.path+'\') > 0 then 'B.num входит в A.path'
else 'B.num НЕ входит в A.path'
end as flag1
from A inner join B on A.id = B.id;
11 фев 12, 10:21    [12073601]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить