最近要实现一个功能,头疼了半天,最终使用这个函数解决了
问题:
一个物料表tb_goods
一个成分表tb_type
实现效果:
实现sql:
SELECT
A.ID
, A.NAME
, A.TYPE
, (
SELECT
LISTAGG(TO_CHAR(NAME), ',') WITHIN GROUP (ORDER BY ID)
--WM_CONCAT(TO_CHAR(NAME))
-- LISTAGG 函数 11g版本推出 自定义分隔 == 10g版本推出 WM_CONCAT(TO_CHAR(NAME)) 默认逗号分隔
FROM
TB_TYPE
WHERE
ID IN (
SELECT
REGEXP_SUBSTR(A.TYPE, '[^,]+', 1, ROWNUM)
FROM
DUAL
CONNECT BY
ROWNUM <= LENGTH(A.TYPE) - LENGTH(REGEXP_REPLACE(A.TYPE, ',', '')) + 1
)
) AS A.TYPENAME -- 原料组成名称
FROM
TB_GOODS A
问题倒是解决了,只不过效率问题又出现了,上千条数据几十秒才能查询出来.
如果有更好的解决方案,希望可以告诉一下,谢谢!
奋斗的路上不止你一个