表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 雁塔南路 雁塔路五体投地跪拜各位老大帮帮小弟,急啊,求告人指点
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有3万多数据,表2有4千多数据。我用多条SQL对逐一在表1中每一列对每一个字典项进行检索可以实现,但是这样效率太低,机子都跑死了
有没有简单的方法,有效率的SQL语句能够实现这个功能?
求指教啊
小弟在这里跪拜各位老大了
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 雁塔南路 雁塔南路
from 表1 a ,表2 b
where b.字典项 like a.描述+'%'
update 表2 set 表2.字典项=表1.字典项,标准地址=(case when表2.字典项='地址不详' then null else 标准地址 end ) from 表1 where 表2.id=表1.id
‘对表1进行操作’:即Update表1
‘将表1中(...)标准地址字段规范(...)’:更新的字段为表1.标准地址
从预期的结果上看,更新的依据是表2.字典项 Like '%表1.描述%',或者说表2.字典项包含于表1.描述把整个意思串起来即#2,#3
WHERE t1.描述 Like '*'+t2.字典项+'*';或者UPDATE t1, t2 SET t1.标准地址 = t2.标准地址
WHERE instr(t1.描述,t2.字典项)>0;