qq_24949293
qq_24949293
采纳率50%
2019-05-20 21:52 阅读 3.0k

如何匹配匹配两个表的相同字段来为其中一个表的列赋值

20

我使用的SQL server 2008 目前有两个表 两表示意图如下:

图片说明

图片说明

其中第一个表的数据量在5.4w,第二个表的数据量则在11w左右。两表中的lat和lng,即经纬度字段存在大量相同数据。

我想要将第一个表中的tag数值赋予给两表经纬度相同的第二个表 但无奈两表直接内连接会有81w条数据,面对大量重合数据无从下手。所以小弟就像问一下,有没有其他办法可以把第一个表中的tag按照lat和lng双字段匹配到第二个表的tag上。 急用,求救 谢谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • qq_34913422 qq_34913422 2019-05-21 01:30

    DECLARE @lat2 varchar(100),@lng2 varchar(100),@tag1 int,@mid varchar(100),@oid varchar(100),@table2Count int,@i int
    set @i=0
    DECLARE cursor_name CURSOR FOR --定义游标
    SELECT mid,oid,lat,lng FROM table2
    OPEN cursor_name --打开游标
    FETCH NEXT FROM cursor_name INTO @mid,@oid,@lat2,@lng2 --抓取下一行游标数据
    select @table2Count=count(*) from table2
    WHILE @i<@table2Count
    BEGIN
    select top 1 @tag1 from table1 where lat=@lat2 and lng=@lng2
    update table2 set tag=@tag1 where mid=@mid and oid=@oid
    FETCH NEXT FROM cursor_name INTO @mid,@oid,@lat,@lng
    set @i=@i+1
    END
    CLOSE cursor_name --关闭游标
    DEALLOCATE cursor_name --释放游标

    用游标循环试试, select top 1 @tag1 from table1 where lat=@lat2 and lng=@lng2这一句的时候最好判断一下@tag1是否赋值了。

    点赞 评论 复制链接分享
  • u011909918 有人把我昵称抢了 2019-05-21 10:20

    这个数据量还好,不是很大,直接用create table table_name as select ...创建一个新表,完了修改表名就好了

    点赞 评论 复制链接分享
  • qq_40759638 迷幻之旅 2020-11-18 19:03

    请问你解决了吗

     

    点赞 评论 复制链接分享

相关推荐