首页 > 解决方案 > 我需要获取列,如果一个字符串存在于同一个表的另一列中,使用 db2

问题描述

我有一个表 t1,我需要检查 c2 中是否存在字符串 c1(需要 db2 查询)

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

预期成绩 :

c1 c2

街道:1 条街道

25 : 25 35

标签: db2

解决方案


按原样尝试以下操作。
这个想法是对两列中的每个字符串进行标记,假设单词由一个或多个空格分隔。我们加入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  |

推荐阅读