sqlsever表间关联的建立?

iou3344 2016-02-18 06:53:55
Contenta表:id name birthday age works
Content2表:id name birthday age works


Contenta和Content2是两个存放在同一个数据库(moives)下的不同的电影作品数据表,其中,name是存放演员名字的表,works字段是存放电影名称的表,两个表中birthday、age等信息各有缺失,但是两者合并则可以补齐大多数数据,其中works的构成是一串以英文逗号链接的电影名字字符串合集,两个works的字符串顺序不一样(电影名称顺序不一样),但是只要他们中间用英文逗号拆分后的部分有5个部分是一致的(也就是说同名同姓而且有5部电影的名字是一样的),那么我们就可以认为是同一个演员的作品,那么,这两个表中演员的关联就可以建立起来了,于是就可以把他们的birthday、age进行合并(有数据的往null里面写)。这样的sql该怎么写呢?

sqlsever表间关联的建立?是这样描述吗?
...全文
214 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
octwind 2016-02-27
  • 打赏
  • 举报
回复
没有怎么测试,你试试看 if object_id('getStr') is not null drop function getStr go create function getStr(@s varchar(1000) returns varchar(1000) as begin declare @ss varchar(1000) declare @location int declare @start int declare @seedStr varchar(100) declare @newStr varchar(1000) declare @compStr varchar(100) set @ss = @s while charindex(',',@ss) > 0 begin set @start = charindex(',',@ss) set @seedStr = substring(@ss,1,@start-1) set @location = charindex(',',@ss,@start + 1) while @location <> 0 begin set @compStr = substring(@ss,@start + 1, @location-@start - 1) if @compStr < @seedStr set @seedStr = @compStr set @start = @location + 1 set @location = charindex(',',@ss,@start) end select @newStr = isnull(@newStr + ',' ,'') + @seedStr set @ss = replace(replace(replace(@ss,@seedStr + ',',''),',' + @seedStr,''),@seedStr,'') end return @newStr + ',' + @ss end go update a set a.birthday = case a.birthday when null then b.birthday else a.birthday end, a.age = case a.age when null then b.age else a.age end from Contenta a inner join Content2 b on a.name = b.name and getStr(b.works) like getStr(a.works)+ '%'
octwind 2016-02-27
  • 打赏
  • 举报
回复
update a set a.birthday = case a.birthday when null then b.birthday else a.birthday end, a.age = case a.age when null then b.age else a.age end from Contenta a inner join Content2 b on a.name = b.name and dbo.getStr(b.works) like dbo.getStr(a.works)+ '%'
iou3344 2016-02-27
  • 打赏
  • 举报
回复
@无聊码农 版主哥哥 请你有空也帮我看看这个难题好吗? 这个问题的出现是因为我是通过用火车头这样的采集器采集的不同网站的数据,所以才会出现什么所说的结构一样但是数据却各有缺失的情况出现,所以最终我是要把这些数据相互合并以便得到一个信息最为完整的数据库,于是,就有了上面这个问题了。。
iou3344 2016-02-19
  • 打赏
  • 举报
回复
PS:只是把Content2表的数据往Contenta表汇总合并就行了。
江南小鱼 2016-02-19
  • 打赏
  • 举报
回复
不是一条sql能搞定的事情了,要写一个脚本去做这些事 1、遍历Content2表birthday和age不为null的记录,读取works字段,内层循环遍历Contenta(birthday或age为null),满足你的条件,去更新Contenta表字段 2、遍历Contenta表birthday和age不为null的记录,读取works字段,内层循环遍历Content2(birthday或age为null),满足你的条件,去更新Content2表字段
iou3344 2016-02-19
  • 打赏
  • 举报
回复
引用 1 楼 lovelj2012 的回复:
不是一条sql能搞定的事情了,要写一个脚本去做这些事 1、遍历Content2表birthday和age不为null的记录,读取works字段,内层循环遍历Contenta(birthday或age为null),满足你的条件,去更新Contenta表字段 2、遍历Contenta表birthday和age不为null的记录,读取works字段,内层循环遍历Content2(birthday或age为null),满足你的条件,去更新Content2表字段
什么样的脚本呢,可以给我一个例子做参考吗?

34,576

社区成员

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

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