问题描述
我有两个表需要联接。一个表(称为表A)在名为“ ProductCode”的字段中包含产品的字母代码。另一个表(表B)包含相同的字母代码,并附有一堆数字,因此我使用REGEXP_MATCHES(B.ProductCode,'([[A-Za-z])','g'))提取它[1]。然后,我尝试像这样连接两个表:
select * from A
inner join B on A.ProductCode = REGEXP_MATCHES(B.ProductCode,'([A-Za-z])','g'))[1]
例如:
Table A:
----------------------
Product Code | Sales
----------------------
A | 100
B | 200
Table B:
---------------------
Product Code | Region
---------------------
A234 | Midwest
B543 | Southwest
上面的联接的期望结果将是:
------------------------------
Product Code | Sales | Region
----------------------------
A | 100 | Midwest
B | 200 | Southwest
但是我收到了错误消息:“在JOIN条件下不允许使用Set-turning函数”。
我知道REGEXP_MATCHES返回一个数组,但是我正在提取该数组的元素([1]),所以它不再应该是集合吗?不知道如何解决它。感谢您的任何建议。
解决方法
对于此示例数据,正则表达式似乎有些过分。您可以只使用substring()
或like
:
select a.*,b.region
from a
inner join b on b.product_code like a.product_code || '%'