PostgreSQL:在JOIN条件下不允许使用集合调整功能

问题描述

我有两个表需要联接。一个表(称为表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 || '%'