新足迹

 找回密码
 注册

精华好帖回顾

· 雯雯小厨之四川粉蒸肉 (2007-12-11) youlyw · Mau (2008-11-12) lyn
· 编辑贴 (2005-12-8) 燕尾蝶 · BRISBANE北区买房记 (2009-4-11) yz3183
Advertisement
Advertisement
查看: 1817|回复: 8

求教写一段SQL语句。用表2中的一系列关键字替换表1内容 [复制链接]

头像被屏蔽

禁止发言

发表于 2020-3-31 20:13 |显示全部楼层
此文章由 汪汪汪 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 汪汪汪 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 汪汪汪 于 2020-3-31 21:40 编辑

Table A  中字段 item 是字符类的数据。
内容比如是:
item1
item2
item3
...

Table B 中字段Key 与 New 也是字符类。
key1, new1
key2, new2
key3, new3


请问如何用一段SQL做到:
在table A中每一条item中的字符 查找 b表中的每一个key 并用相应的new 替换。

即:对应每一条内容item,有很多个关键字key需要用对应的新字符new替换。
如果一条条做太累了。

Update TableA SET item = REPLACE(item, 'key1', 'new1') ;
Update TableA SET item = REPLACE(item, 'key2', 'new2') ;
...
...


key 与new已经做在表B中了。能否用一条语句做到?



Advertisement
Advertisement

发表于 2020-3-31 20:20 来自手机 |显示全部楼层
此文章由 kksp 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kksp 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不知道是否理解正确了
Update TableA set item= TableB.new from TableA inner join TableB on TableA.item=TableB.key
头像被屏蔽

禁止发言

发表于 2020-3-31 21:33 |显示全部楼层
此文章由 汪汪汪 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 汪汪汪 所有!转贴必须注明作者、出处和本声明,并保持内容完整
kksp 发表于 2020-3-31 20:20
不知道是否理解正确了
Update TableA set item= TableB.new from TableA inner join TableB on TableA.item ...

运行没通过。 主贴将增加一下细节。麻烦再看看。
头像被屏蔽

禁止发言

发表于 2020-3-31 21:35 |显示全部楼层
此文章由 汪汪汪 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 汪汪汪 所有!转贴必须注明作者、出处和本声明,并保持内容完整
另问,有可能用replace做吗?
头像被屏蔽

禁止发言

发表于 2020-3-31 21:40 |显示全部楼层
此文章由 汪汪汪 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 汪汪汪 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果一条条做太累了。

Update TableA SET item = REPLACE(item, 'key1', 'new1') ;
Update TableA SET item = REPLACE(item, 'key2', 'new2') ;
...
...


key 与new已经做在表B中了。能否用一条语句做到?

发表于 2020-3-31 22:20 来自手机 |显示全部楼层
此文章由 kksp 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kksp 所有!转贴必须注明作者、出处和本声明,并保持内容完整
汪汪汪 发表于 2020-3-31 21:40
如果一条条做太累了。

Update TableA SET item = REPLACE(item, 'key1', 'new1') ;

具体要看你是用那种SQL,如果是sql server你可以用cursor 循环TableB里面的每一行然后运行你那个replace
Advertisement
Advertisement

发表于 2020-3-31 22:44 |显示全部楼层
此文章由 Janet 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Janet 所有!转贴必须注明作者、出处和本声明,并保持内容完整
汪汪汪 发表于 2020-3-31 21:33
运行没通过。 主贴将增加一下细节。麻烦再看看。

要看你SQL运行的平台吧, 不同平台上对Update 的要求不同, ANSI标准应该是不可以用inner join

update table1 set item = item_new from table1, table2 where table1.item_key = table2.key

试试这样呢

发表于 2020-3-31 22:59 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 kawara 于 2020-3-31 23:06 编辑

这个要loop的,用SQL做不了。要用pl/sql, t-sql之类的数据库编程来做。

两个cursor,第一个读表A,第二个读表B。两层循环。伪代码大概是:

For every record in Table a
       For every record in table B
              If a.item contains B.key
                    Update TableA SET A.item = REPLACE(a.item, b.key,b.value)

            

发表于 2020-4-1 02:06 来自手机 |显示全部楼层
此文章由 alex_zheng 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 alex_zheng 所有!转贴必须注明作者、出处和本声明,并保持内容完整
建张第三表,先把要换的啥都join好了再update

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部