数据库中有两个表,第一个表是Book
,列是Id(varchar(40)), "Name"(varchar(255)), Tags(varchar(40)[])
,第二个表是Temp
,列是"Name"(varchar(255)), Id(varchar(40)), duplicateids (varchar(40)[])
。
我需要在postgresql中编写脚本。如果Book
表中Tags
列中的任何记录的id与Temp
表中duplicateids
列中的元素匹配,则仅将Book
表中Tags
列中数组中的此元素替换为Temp
表中的Id
字段。
示例表“Book”
| ID|名称|标签|
| --|--|--|
| 第一个|'Book1'|'tag1','tag2','tag3']|
| 2'|'Book2'|'tag4','tag5']|
表“温度”
| 名称|ID|重复类|
| --|--|--|
| 'Temp1'|测试标签|'tag2','tag5']|
| 'Temp2'|'tag100'|'tag3']|
脚本之后应该是:
| ID|名称|标签|
| --|--|--|
| 第一个|'Book1'|'tag1','testtag','tag100']|
| ‘2’|'Book2'|'tag4','testtag5']|
1条答案
按热度按时间kyxcudwk1#
下面的查询通过将
Book.Tags
和Temp.duplicateids之间的第一个交集替换为Temp.Id
来更新连接。如果每对存在max 1个交集,这应该有效,因为如果交集是空集,它将只计算为null
,并且不替换任何东西。但是,如果可能有多个整数,那么这将只替换第一个匹配项。如果你想替换所有的匹配项,那么我建议实现一个有while循环的函数,虽然至少有一个交集会进行替换,直到交集为空集。但为了简洁起见,我没有在这里这样做。下面的查询未经测试,如果有任何问题请告诉我。字符串
资料来源: