比较 Postgres sql 中一个与另一个的部分相似的字段

问题描述 投票:0回答:1

我想编写一个

Select
查询,我可以在其中查看某一列是否类似于不同表 postgresql 中另一列的一部分。

tblNames1

身份证 描述 目标表
1 选择测试.fn_hierarchy_prod_group 测试_1
2 选择运行_更新_查询 测试_2
3 选择 func_datad_addr_1 测试_3
4 选择func_datad_addr 测试_4

tblNames2

身份证 描述 目标表
1082 fn_hierarchy_prod_group dba.l
1091 func_datad_addr dba.n
1099 fn_hierarchy_customer dba.m
1100 运行更新查询 dba.j

查询应返回并更新目标 tblnames1:

身份证 描述 目标表
1 选择测试.fn_hierarchy_prod_group dba.l
2 选择运行_更新_查询 dba.j
3 选择 func_datad_addr_1 测试_3
4 选择func_datad_addr dba.n

我是 postgres 的新手,并且搜索了不同的方法来更新它,但我没有成功。我尝试过使用类似的查询

select *
from tblnames1 a 
left join tblnames2 b on 1=1 
where b.target_table like concat('%',a.target_table,'%')

但是这个查询是错误的。

postgresql postgresql-9.3 postgresql-9.4 postgresql-9.5
1个回答
0
投票
  1. 根据您显示的架构,您想要加入正则表达式匹配的
    Description
    列,而不是
    target_table
  2. 您希望在正则表达式中包含仅包含对象标识符的较短
    Description
    ,然后在包含 SQL
    Description
    语句的较长
    select
    中查找它。

db<>fiddle 的演示:

select a.id, a.description, b.target_table
from tblNames1 a 
left join tblNames2 b
  on a.description ilike concat('%',b.description,'%');
id 描述 目标表
1 选择测试.fn_hierarchy_prod_group dba.l
2 选择运行_更新_查询 dba.j
3 选择 func_datad_addr_1 dba.n
4 选择func_datad_addr dba.n
  1. 您可能想要不区分大小写
    ilike
    ,而不是
    like
  2. 根据其他
    select
    列中的那些
    Description
    语句的来源,如果它们使用不同的大小写并将其与不同的双引号结合起来,那么您可能会很难匹配它们(未加引号的会折叠为小写,引用的会保留原始内容)情况) - 在那种情况下
    ilike
    将会是错误的。
  3. 如果这些是视图定义,则有系统目录和视图可以告诉您哪个视图依赖于哪些表。
© www.soinside.com 2019 - 2024. All rights reserved.