wm_contact(column)是oracle10g开始使用的函数
一般外面用to_char(wm_contact(column))包装一下。数据库服务器有的设置会不支持,不用to_char()包装就会报错
wm_concat(列名)函数,能把指定的列的值,(按照group by 中指定的分隔方法),一个个用逗号链接起来
#通用用法
select id,wm_concat(test) result
from test
group by id;
# oracle有的版本不支持上面的写法,需要用to_char()包装一下
select id,to_char(wm_concat(test)) result
from test
group by id;
今天遇到两个问题,
1、有些sql函数功能比较炫,但是如果要合并的表中的数据太多的话会很影响sql执行效率。比如oracle的wm_concat。
创建客户,选择客户类型,可以多选。设计表时将客户id和客户类型id放在单独的一个子表中。
而后台查询数据给手机端时,需要将客户类型展示出来,所以就在查询列表是关联了下客户类型表,使用wm_concat函数将该客户的多个类型用douhao , 分隔开。组成一个字符串。但是当类型表中有2w条数据的时候,查询非常慢。
将该函数去掉后,查询很快。
# 用LEFT JOIN 联查wcm_concat语句,如果待处理表中的数据很多,那么查询非常慢,不推荐这么使用。最后去掉了这段代码,在类中实现了wm_concat的相似功能。有时候sql虽然是万能的,但是运用不当会影响效率
LEFT JOIN (SELECT wm_concat(to_char(cbcd.CODE_NAME)) kind_name,SALE_CUST_ID FROM SALE_CUSTOMER_KIND sck
LEFT JOIN COMM_BASE_CODE_DETAIL cbcd ON cbcd.CODE_ID=sck.KIND_ID
GROUP BY sck.SALE_CUST_ID) sss ON sss.SALE_CUST_ID=SC.SALE_CUST_ID