我有两个表,我们称之为表A和表B。它们看起来像:
A.col1 A.colX B.colY
1 123 123
2 234, 123 234
3 2, 52352 2
52352
我所要做的就是JOIN
它们,很可能使用 WHERE
,因为我的环境中不支持非 equi 连接。我对表格A
有问题,其中数字是字符串。我尝试了以下解决方案:
SELECT...
FROM A, B
WHERE A.colX LIKE concat('%', B.colY, '%')
但它不能正常工作,例如,来自 B.colY
的值 2
出现在表 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 中删除空格,在前后添加一个逗号,然后用逗号对 B.colY 进行like
。
||
以 ANSI SQL 方式串联,但某些产品使用 CONCAT
或 +
代替。
您可以将字符串拆分((成一个数组,然后取消嵌套((以为每个部分生成单独的行,然后执行常规连接。
https://prestodb.io/docs/current/functions/string.html#split
https://prestodb.io/docs/current/sql/select.html#unnest