主表 保存 服装信息
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表的商品很多,通过这种方式获取的话,很慢很慢,有什么好办法可以加快商品的读取速度吗?
用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
主表就是有冗余的。只是重建这个冗余的时候很慢。
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
你可以用一下 存储过程来做啊 很好用的