首页 新闻 赞助 找找看

查询语句中调用函数的问题,怎么解决效率问题。

0
悬赏园豆:100 [已解决问题] 解决于 2012-09-03 10:29

主表 保存 服装信息

ID ,Name

1  , T-Shirt

2,  西服

3,  衬衫

字表,保存不同服装的型号

ID,PID,ProductNo

1,1,X

2,1,L

3,1,S

4,2,XXL

5,2,XXXL

6,2,M

基本表结构如上,现在想得到一个结果

ID ,Name ,ProductNo

1,T-shirt,x-l-s  (x-l-s这个是通过一个函数循环得到的)

语句基本是

  select id,name,dbo.getProductNo(ID) from Product


这样的方法,但是Product表的商品很多,通过这种方式获取的话,很慢很慢,有什么好办法可以加快商品的读取速度吗?

迷路中的路人甲的主页 迷路中的路人甲 | 初学一级 | 园豆:93
提问于:2012-09-01 11:35
< >
分享
最佳答案
0

用xml path来取x-l-s吧

或者主表可以做适当冗余。

select B.PID,LEFT(pns,LEN(pns)-1) as pns FROM (
SELECT PID,
(SELECT ProductNo+',' FROM 表2
  WHERE PID=A.PID
  for xml path('')) as pns
from 表2 A 
group by PID
) B 
收获园豆:80
向往-SONG | 老鸟四级 |园豆:4853 | 2012-09-01 12:23

主表就是有冗余的。只是重建这个冗余的时候很慢。

迷路中的路人甲 | 园豆:93 (初学一级) | 2012-09-02 09:49
其他回答(2)
0

SQLServer有stuff函数功能,再加上xml path就能搞定。

我建个表Test,字段有:Id和t

数据:

id    t
1    1
1    2
1    3
2    1
2    2
3    4
3    5
4    1
4    4

SELECT  a.id,
        STUFF(( SELECT  ',' + t
                FROM    test
                WHERE   test.id = a.id
              FOR
                XML PATH('')
              ), 1, 1, '') AS personname
FROM    ( SELECT    id
          FROM      Test
          GROUP BY  id
        ) a

最终结果:

id    pns
1    1,2,3
2    1,2
3    4,5
4    1,4

收获园豆:20
webaspx | 园豆:1973 (小虾三级) | 2012-09-01 12:25
0

你可以用一下 存储过程来做啊  很好用的

IT小伙儿 | 园豆:11 (初学一级) | 2012-09-02 09:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册