用逗号分隔的字符串连接表(使用 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
我有两个 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