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

Join tables with comma separated string (using WHERE)

我有两个 table,我们称它为 table A 和 table B。它们看起来像:

A.col1        A.colX            B.colY
1             123               123
2             234, 123          234     
3             2, 52352          2
                                52352

我要做的是 JOIN 它们,最有可能使用 WHERE,因为我的环境不支持非 equi 连接。我遇到 table A 的问题,其中数字作为字符串。我尝试了以下解决方案:

SELECT... 
FROM A, B
WHERE A.colX LIKE concat('%', B.colY, '%')

但它无法正常工作,例如来自 B.colY 的值 2 出现在来自 table A.colX.

的每个字符串中

最后的例子是我想要实现的目标:

          output
1         123 -------> 123
2         234, 123 --> 234
1         234, 123 --> 123
3         2, 52352 --> 2
3         2, 52352 --> 52352

你对此有什么想法吗?

where (',' || replace(A.colX,' ','') || ',') LIKE ('%,' || B.colY || ',%')

即删除 A.colX 中的空格,前后添加一个逗号,然后使用 like 和 B.colY 也使用逗号。

|| 是 ANSI SQL 方式的串联,有些产品使用 CONCAT+ 代替。

您可以将字符串 split() 成一个数组,然后 unnest() 为每个部分生成单独的行,然后执行常规连接。

https://prestodb.io/docs/current/functions/string.html#split

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