表1
id          描述         标准地址
1        雁塔路30号2        北山门口村3        长安路100号4        地址不详5        北山门村6        雁塔南路表2
id         字典项         标准地址
1        北山门           北山门村 2        雁塔路           雁塔路3        雁塔南路         雁塔南路4        长安路           长安路5        铁一村           铁炉庙村6        铁二村           铁炉庙村
SQL中如何做到根据表2中的字典项对表1进行操作,将表1中包含表2字典项的某行的标准地址字段规范为表2中的标准地址字段,使表1达到如下结果:
id          描述         标准地址
1        雁塔路30号      雁塔路2        北山门口村      北山门村3        长安路100号     长安路4        地址不详5        北山门村        北山门村6        雁塔南路        雁塔路五体投地跪拜各位老大帮帮小弟,急啊,求告人指点

解决方案 »

  1.   

    求高人指点啊!!!
    我这里表很大,表1有3万多数据,表2有4千多数据。我用多条SQL对逐一在表1中每一列对每一个字典项进行检索可以实现,但是这样效率太低,机子都跑死了
    有没有简单的方法,有效率的SQL语句能够实现这个功能?
    求指教啊
    小弟在这里跪拜各位老大了
      

  2.   


     IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = '表1')
     BEGIN
    DROP TABLE 表1
     END
     GO
     CREATE TABLE 表1
     (
    id INT,
    描述 VARCHAR(100),
    标准地址 VARCHAR(100)
     )
     GO
     
     INSERT INTO 表1
     SELECT 1,'雁塔路30号','' UNION SELECT 2,'北山门口村','' UNION SELECT 3, '长安路100号','' UNION SELECT 4, '地址不详','' UNION SELECT 5, '北山门村','' UNION SELECT 6, '雁塔南路',''  IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = '表2')
     BEGIN
    DROP TABLE 表2
     END
     GO
     CREATE TABLE 表2
     (
    id INT,
    字典项 VARCHAR(100),
    标准地址 VARCHAR(100)
     )
     GO
    INSERT INTO 表2
    SELECT 1, '北山门', '北山门村'  UNIONSELECT 2, '雁塔路', '雁塔路'  UNIONSELECT 3, '雁塔南路', '雁塔南路'  UNIONSELECT 4, '长安路', '长安路'  UNIONSELECT 5, '铁一村', '铁炉庙村'  UNIONSELECT 6, '铁二村', '铁炉庙村'
    UPDATE 表1 SET 表1.标准地址 = B.标准地址 FROM 表2 AS B WHERE CHARINDEX(B.字典项,表1.描述) > 0
    SELECT * FROM 表1id 描述 标准地址
    1 雁塔路30号 雁塔路
    2 北山门口村 北山门村
    3 长安路100号 长安路
    4 地址不详
    5 北山门村 北山门村
    6 雁塔南路 雁塔南路
      

  3.   

    update 表1 set 标准地址=b.标准地址
    from 表1 a ,表2 b
    where b.字典项 like a.描述+'%'
      

  4.   


    update 表2 set 表2.字典项=表1.字典项,标准地址=(case when表2.字典项='地址不详' then null else 标准地址 end )   from 表1 where  表2.id=表1.id
      

  5.   

    ‘SQL中如何做到根据表2中的字典项对表1进行操作,将表1中包含表2字典项的某行的标准地址字段规范为表2中的标准地址字段,使表1达到预期结果’自己把问题已经描述的很清楚了啊:
    ‘对表1进行操作’:即Update表1
    ‘将表1中(...)标准地址字段规范(...)’:更新的字段为表1.标准地址
    从预期的结果上看,更新的依据是表2.字典项 Like '%表1.描述%',或者说表2.字典项包含于表1.描述把整个意思串起来即#2,#3
      

  6.   

    magician547和fengerfei2000大哥(2楼和3楼的大哥)你们太牛了,没想到这么简单就解决了,太感谢了
      

  7.   

    两位大哥能给讲讲原理吗,原来SQL中的条件是把两个表中的所有行都进行比较啊,我原来还以为只比较一次呢,又长知识了,太感谢了
      

  8.   

    ACCESS写法:UPDATE t1, t2 SET t1.标准地址 = t2.标准地址
    WHERE t1.描述 Like '*'+t2.字典项+'*';或者UPDATE t1, t2 SET t1.标准地址 = t2.标准地址
    WHERE instr(t1.描述,t2.字典项)>0;