新足迹

 找回密码
 注册

精华好帖回顾

· 海外电话面试经历 (香港):已签合同 (2006-12-5) wwwdot · 熊猫食神·lovin' muffin (2007-10-12) remey
· [悉尼] 我是如何找房的 ,纯技术贴 【非地区选择贴】 (2011-2-15) pengzhao · 澳洲建房之-想说爱你不容易! (2011-5-15) tianne
Advertisement
Advertisement
查看: 1834|回复: 8

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

头像被屏蔽

禁止发言

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

禁止发言

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

发表回复

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

本版积分规则

Advertisement
Advertisement
返回顶部