我有两个表,我们称之为表A和表B.它们看起来像:
A.col1 A.colX B.colY
1 123 123
2 234, 123 234
3 2, 52352 2
52352
我要做的就是JOIN
他们,最有可能使用WHERE
,因为我的环境不支持非equi join。我遇到了表A
的问题,其中数字是字符串。我尝试了解决方案:
SELECT...
FROM A, B
WHERE A.colX LIKE concat('%', B.colY, '%')
但它无法正常工作,例如2
中的值B.colY
出现在表A.colX
的每个字符串中。
最后的例子我想要实现的目标:
output
1 123 -------> 123
2 234, 123 --> 234
1 234, 123 --> 123
3 2, 52352 --> 2
3 2, 52352 --> 52352
你有什么想法吗?
答案 0 :(得分:2)
where (',' || replace(A.colX,' ','') || ',') LIKE ('%,' || B.colY || ',%')
即。从A.colX中删除空格,在前后添加逗号,然后使用逗号与B.colY进行like
。
||
是ANSI SQL方式的串联,有些产品使用CONCAT
或+
代替。
答案 1 :(得分:0)
你可以将字符串split()分割成一个数组,然后使用unpst()为每个部分生成单独的行,然后执行常规连接。
https://prestodb.io/docs/current/functions/string.html#split