使用逗号分隔的字符串连接表(使用WHERE)

时间:2015-10-02 12:08:48

标签: sql join presto

我有两个表,我们称之为表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

你有什么想法吗?

2 个答案:

答案 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

https://prestodb.io/docs/current/sql/select.html#unnest