有关SQL语句的问题

select count(*) from dual where 'A0132' in (

select column_value
from table (select split(WMSYS.WM_concat(industrytypeno), ',')

      from map_industry mi
     where mi.newmaterial is not null

)

)
谁能帮我解答一下这段SQL的意思。

[code="java"]select split(WMSYS.WM_concat(industrytypeno), ',') from map_industry mi where mi.newmaterial is not null 查出来是一张表 a
select column_value from a 查出来是单列的表B
select count(*) from dual where 'A0132' in(B表的这一列)[/code]

[code="java"]split(WMSYS.WM_concat(industrytypeno), ',') 这句话用到了两个函数,对一个列处理[/code][code="java"]spilt是分割成(*,‘,’)用逗号分割成列列名应该是:column_value[/code]

[code="java"]wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行[/code]

WMSYS.WM_concat是聚合函数,它会把符合条件的数据用","逗号隔开串联在一起。

spilt是你自定义函数,根据上下文分析,它应该解析"aa,bb,cc"这种字符串,返回一个嵌套表(比如:r(1)="aa",r(2)="bb",r(3)="cc")。

table (select split(WMSYS.WM_concat(industrytypeno), ',')

这句是通过table函数将嵌套表转化为伪表,放到子查询中,相当于:
[code="sql"]
aa
bb
cc
[/code]

最后外层查询是检索'A0132'在上面结果集的纪录数。

明白了吗