两个表数据处理问题

AMinfo 2013-12-28 02:28:30
请帮忙看看:

一、有2个表,
表1:MainTable (现有记录数在10万条左右)
字段:
id bigint自动编号
Title nvarchar(30)
SubId nvarchar(max)

表2:SubTable (现有记录数在300万条左右)
字段:
id bigint自动编号
Description nvarchar(100)

二、现在需要做的是,判断MainTable中的Title是否出现在SubTable表的Description中,如果有的话,则将SubTable的ID值记录到MainTable表的Subid中。

三、现在用VBS的实现方法是:
sql = "select id from SubTable Where Description like '%" & Title & "%' order by id"
rs.open sql,conn,1,1
然后再通过rs.movenext一条一条记录SubTable的id号后再存到MainTable的SubId字段中
这种方法目前可以实现想要的效果,可是太慢,平均1秒中才能完成MainTable的一条记录模糊匹配,10万条记录需要100000秒,全部处理完大概需要27个小时,非常慢。

请问有没有其他办法来实现?
...全文
119 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AMinfo 2013-12-28
  • 打赏
  • 举报
回复
麻烦帮忙再看看 http://bbs.csdn.net/topics/390680794
AMinfo 2013-12-28
  • 打赏
  • 举报
回复
非常感谢2位,基于这2个表再延申还有一个问题,另外开了一贴
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
进一步,修改为update操作:
create table MainTable(Id int, Title varchar(20),SubId varchar(100))

insert into MainTable
select 1  ,'A',       0 union all
select 2  ,'B',       0 union all
select 3  ,'C',       0 union all
select 4  ,'D',       0 union all
select 5  ,'E',       0


create table SubTable(Id int,Description varchar(20))

insert into SubTable
select 1  ,'ABC' union all
select 2  ,'AB' union all
select 3  ,'CD' union all
select 4  ,'EA'
go

--修改数据
update MainTable 
set SubId =cast(MainTable.SubId as varchar) +        
		   (select ','+ CAST(t.ID as varchar)
				  from SubTable t
				  where t.Description like '%'+MainTable.Title+'%'
				  for xml path('')
		   )


--查询修改后的数据
select * from MainTable
/*
ID	title	SubId
1	A	0,1,2,4
2	B	0,1,2
3	C	0,1,3
4	D	0,3
5	E	0,4
*/
       
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
create table MainTable(Id int, Title varchar(20),SubId int)

insert into MainTable
select 1  ,'A',       0 union all
select 2  ,'B',       0 union all
select 3  ,'C',       0 union all
select 4  ,'D',       0 union all
select 5  ,'E',       0


create table SubTable(Id int,Description varchar(20))

insert into SubTable
select 1  ,'ABC' union all
select 2  ,'AB' union all
select 3  ,'CD' union all
select 4  ,'EA'
go


select distinct
       ID,
       title,
       cast(m.SubId as varchar) + 
       
       (select ','+ CAST(t.ID as varchar)
              from SubTable t
              where t.Description like '%'+m.Title+'%'
              for xml path('')
       ) as SubId
       
from MainTable m
/*
ID	title	SubId
1	A	0,1,2,4
2	B	0,1,2
3	C	0,1,3
4	D	0,3
5	E	0,4
*/
       
Leon_He2014 2013-12-28
  • 打赏
  • 举报
回复

select 1 Id,'A' Title,convert(varchar(max), '0') SubId
into #MainTable
union all select 2 ,'B','0'
union all select 3 ,'C','0'
union all select 4 ,'D','0'
union all select 5 ,'E','0'

 select 1 id ,'ABC' Description
into #SubTable
union all select 2 ,'AB'
union all select 3 ,'CD'
union all select 4 ,'EA'

select *
from #MainTable

update b
set SubId=convert(varchar(20),subid) +(select ','+ convert(varchar(20),a.id) from #SubTable  a where CHARINDEX(b.Title,a.Description,1)>0
for xml path('') )
from #MainTable b

select *
from #MainTable

result:
/*
1	A	0,1,2,4
2	B	0,1,2
3	C	0,1,3
4	D	0,3
5	E	0,4
*/
try this
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
引用 4 楼 AMinfo 的回复:
谢谢!求存储过程
上面的 0,1,2,4 这个0是哪儿来的呢
AMinfo 2013-12-28
  • 打赏
  • 举报
回复
谢谢!求存储过程
无涯大者 2013-12-28
  • 打赏
  • 举报
回复
路过,菜鸟初学阶段,帮大牛顶下!!
AMinfo 2013-12-28
  • 打赏
  • 举报
回复
需要实现的结果为: 表MainTable: Id Title SubId 1 A 0,1,2,4 2 B 0,1,2 3 C 0,1,3 4 D 0,3 5 E 0,4
AMinfo 2013-12-28
  • 打赏
  • 举报
回复
表MainTable: Id Title SubId 1 A 0 2 B 0 3 C 0 4 D 0 5 E 0 表SubTable: Id Description 1 ABC 2 AB 3 CD 4 EA 需要实现的结果为: 表MainTable: Id Title Table1Id 1 A 0,1,2,4 2 B 0,1,2 3 C 0,1,3 4 D 0,3 5 E 0,4
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧