мне нужно получить столбец, если одна строка присутствует в другом столбце в той же таблице, используя db2 - PullRequest
0 голосов
/ 26 мая 2020

У меня есть таблица t1, мне нужно проверить, что строка c1 присутствует в c2 (требуется запрос db2)

|C1    |C2      |
|------|--------|
|2     |235     |
|street|1 street|
|tomm  |angel   |
|25    |25 35   |

ожидаемые результаты:

c1 c2

улица: 1 улица

25: 25 35

1 Ответ

0 голосов
/ 27 мая 2020

Попробуйте следующее:
Идея состоит в том, чтобы токенизировать каждую строку в обоих столбцах, предполагая, что слова разделены одним или несколькими пробелами. Мы объединяем оба списка слов в предикат exists, чтобы проверить, есть ли общее слово в обоих.

with t(c1, c2) as
(
values
  ('2', '235')
, ('street', '1 street')
, ('tomm', 'angel')
, ('25', '25 35')
, ('winter season', 'summer season')
)
select c1, c2
from t
where exists
(
select 1
from xmltable
(
'for $id in tokenize($s, "\s+") return <i>{string($id)}</i>' passing t.c1 as "s"
columns tok varchar(100) path '.'
) t1
join xmltable
(
'for $id in tokenize($s, "\s+") return <i>{string($id)}</i>' passing t.c2 as "s"
columns tok varchar(100) path '.'
) t2 on t1.tok = t2.tok
);

Результат:

|C1             |C2             |
|---------------|---------------|
|street         |1 street       |
|25             |25 35          |
|winter season  |summer season  |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...