先看下语句,就是个普通的left join,yyjg_corp_info是主表,yyjg_datamark_info是子表

yyjg_corp_info只有一条数据,yyjg_datamark_info子表中两条数据,这样left join就会出现两条数据,但我们的需求是在页面展示一条数据,只需要子表中的名称(DATAMARK_NAME)附加在主数据上,这时候我们可以使用LISTAGG函数,按符号分隔:

就是我们所看到的按逗号分隔,拼接起来就是

select s.id,s.corp_level,d.DATAMARK_NAME
from yyjg_corp_info s left join (SELECT BUSINESS_ID, LISTAGG(DATAMARK_NAME, ',') WITHIN GROUP (ORDER BY BUSINESS_ID) AS DATAMARK_NAME  
        FROM  YYJG_DATAMARK_INFO GROUP BY BUSINESS_ID) on s.ID=d.BUSINESS_ID
        

left join 查出来的BUSINESS_ID进行关联,拼接完成,注意一点除了查拼接的字段,其他需求的字段需要GROUP BY才行

需要连接多个字段:

SELECT SOCIAL_CREDIT_CODE,LISTAGG(type, ',') WITHIN GROUP (ORDER BY SOCIAL_CREDIT_CODE) as type, LISTAGG(LICENSE_NUMBER, ',') WITHIN GROUP (ORDER BY SOCIAL_CREDIT_CODE) as LICENSE_NUMBER 
from YYJG_CORP_LICENCE GROUP BY SOCIAL_CREDIT_CODE

可以使用多个LISTAGG

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐