gpt4 book ai didi

SQL:根据第二个表替换多行上的部分列

转载 作者:行者123 更新时间:2023-11-30 23:45:26 25 4
gpt4 key购买 nike

我有一个表( pages ),其中包含网页的属性,包括页面内容本身的列, NVARCHAR(MAX)柱子。

在该列中,我需要查找并替换一堆文本字符串并将它们替换为其他文本字符串;这些相关性位于第二个表 ( moving ) 中,其中包含 oldValuenewValue柱子。

因此,例如,如果我从这样的两个表开始:

页表:

ID Content
1 Words words Ancient words
2 Blah blah OutWithTheOld blah
3 Etc etc Useless etc

移动 table :
OldValue          NewValue
Ancient Better
OutWithTheOld InWithTheNew
Useless Useful

...我需要一种方法来制作一个像这样离开页表的替换:
ID Content
1 Words words Better words
2 Blah blah InWithTheNew blah
3 Etc etc Useful etc

pages 表中的给定记录可能需要多次替换,并且无法预测一个 pages 记录是否有一个、一个或多个必要的替换,或者来自 moving.oldvalue 的哪些值。会被发现,需要更换。

我正在使用 SQL Server 2008,而且我对它还很陌生。非常感谢您提供的任何帮助!

最佳答案

这是一个使用 CTE 的单语句非游标方法:

WITH CTE(iteration, page_id, content) AS (
SELECT
0,
P.page_id,
REPLACE(P.content, M1.old_value, M1.new_value)
FROM
Pages P
INNER JOIN Moving M1 ON
P.content LIKE '%' + M1.old_value + '%'
WHERE
NOT EXISTS (SELECT * FROM Moving M2 WHERE P.content LIKE '%' + M2.old_value + '%' AND M2.moving_id < M1.moving_id)
UNION ALL
SELECT
CTE.iteration + 1,
CTE.page_id,
REPLACE(CTE.content, M3.old_value, M3.new_value)
FROM
CTE
INNER JOIN Moving M3 ON
CTE.content LIKE '%' + M3.old_value + '%'
WHERE
NOT EXISTS (SELECT * FROM Moving M4 WHERE CTE.content LIKE '%' + M4.old_value + '%' AND M4.moving_id < M3.moving_id)
)
UPDATE P2
SET
content = CTE1.content
FROM
Pages P2
INNER JOIN CTE CTE1 ON
CTE1.page_id = P2.page_id AND
NOT EXISTS (SELECT * FROM CTE CTE2 WHERE page_id = P2.page_id AND CTE2.iteration > CTE1.iteration)

关于SQL:根据第二个表替换多行上的部分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com