多列之间的匹配模式

2023-12-14

我有两栏说Main and Sub。 (它们可以在同一张桌子上,也可以不在同一张桌子上)。

Main是长度为 20 的 varchar 且Sub是长度为 8 的 varchar。
Sub is always的子集Main它是最后 8 个字符Main.

我可以成功地设计一个查询来匹配模式使用substr("Main",13,8)

Query:

select * from "MainTable"
 where substr("MainColumn",13,8) LIKE (
   select "SubColumn" From "SubTable" Where "SubId"=1043);

但我想在查询中使用 Like、% 、 _ 等,以便我可以松散地匹配模式(这不是全部 8 个字符)。

问题是我该怎么做。?!

我知道下面的查询是完全错误但我想实现这样的目标

Select * from "MainTable"
 Where "MainColumn" Like '%' Select "SubColumn" From "SubTable" Where "SubId"=2'

到目前为止的答案未能解决您的问题:

但我想在查询中使用 Like、% 、 _ 等,以便我可以松散匹配 模式(并非全部 8 个字符)。

你是否使用几乎没有什么区别LIKE or =只要匹配整个字符串(并且没有通配符)in你的字符串)。为了使搜索变得模糊,你需要replace模式的一部分,而不仅仅是添加到模式中。

例如,要匹配最后 7 个(而不是 8 个)字符subcolumn:

SELECT *
FROM   maintable m
WHERE  left(maincolumn, 8) LIKE 
       ( '%' || left((SELECT subcolumn FROM subtable WHERE subid = 2), 7));

我用的是比较简单的left()(随 Postgres 9.1 引入)。
You could将其简化为:

SELECT *
FROM   maintable m
WHERE  left(maincolumn, 7) =
       (SELECT left(subcolumn,7) FROM subtable WHERE subid = 2);

但是,如果您使用我在下面提到的特殊索引,则不会,因为函数索引中的表达式必须精确匹配才能使用。

您可能对扩展感兴趣pg_tgrm.

在 PostgreSQL 9.1 中,每个数据库运行一次:

CREATE EXTENSION pg_tgrm;

两个原因:

  • 它提供了相似算子%。使用它,您可以构建智能相似性搜索:

    --SELECT show_limit();
    SELECT set_limit(0.5); -- adjust similarity limit for % operator
    
    SELECT *
    FROM maintable m
    WHERE left(maincolumn, 8) %
          (SELECT subcolumn FROM subtable WHERE subid = 2);
    
  • 它供应指数支持对彼此而言LIKE and %

    如果读取性能比写入性能更重要,我建议您创建一个功能性的GIN 或 GiST 索引如下:

    CREATE INDEX maintable_maincol_tgrm_idx ON maintable
    USING gist (left(maincolumn, 8) gist_trgm_ops);
    

    该索引支持任一查询。请注意,它会带来一些写入操作的成本。
    此相关答案中类似案例的快速基准.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多列之间的匹配模式 的相关文章

  • 查找表或视图的依赖对象

    背景 在 PostgreSQL 中删除 或替换 对象时 如果存在依赖关系 则删除将失败 不指定CASCADE Problem 数据库返回的错误信息没有列出依赖对象 示例解决方案 该查询可能类似于 SELECT FROM informatio
  • 为什么“setval()”失败并显示“关系...不存在”?

    如果您尝试设置这样的序列号 SELECT setval table ID seq SELECT max ID 1 FROM table 您可能会遇到以下错误 ERROR relation table ID seq does not exis
  • 与 Postgres 的 TCP 连接安全吗?需要 SSL 吗?

    早上好 我正在浏览 Postgresql 配置文件 最近注意到有一个ssl选项 我想知道什么时候需要这样做 假设您有一个应用程序服务器和一个数据库服务器 不在专用网络内运行 如果用户尝试登录 如果未启用 SSL 应用程序服务器在查找用户密码
  • 在 Sequelize 中添加带有起始值的自动递增整数

    经过一些研究 我似乎无法找到执行以下操作的好方法 我不想向现有表添加新列 该列应该是一个自动递增整数 从值 1000 开始 我的迁移文件现在简单明了 use strict module exports up queryInterface S
  • 基准测试:PostgreSQL 上的 bigint 与 int

    我想提高数据库性能 在一个项目中 所有表都来自int to bigint 我认为这不仅在存储方面是一个糟糕的选择 因为int需要4 bytes and bigint需要8 bytes 但也与性能有关 所以我创建了一个小表1000万条目 其中
  • 创建新表时 Postgres 客户端锁定

    我正在尝试在 postgres 中创建一个新表 但是当我这样做时 它只是在CREATE TABLE call sudo usermod s bin bash postgres sudo su postgres postgres host p
  • 如何获取表中所有列的计数(*)?使用 PostgreSql

    我有一堆表 其中几个有数百列 我需要获取每列的非空值计数 并且我一直在手动执行此操作 我想找出一种方法来获取表中所有列的所有计数 我查了 stackoverflow 和 google 但找不到答案 我尝试了这个 但它只是为每列返回 1 的值
  • 如何在PostgreSQL中选择具有级别的表的所有层次结构

    我现在有一个问题 我有一个名为地方的表 其结构如下 id 父 ID name 我想做一个选择来拥有该表的所有层次结构 有一个数据的小例子 1 null 123 Barclay St 2 1 Floor 1 3 1 Floor 2 4 1 F
  • Haskell 中的模式匹配正则表达式模式

    在 Scala 中 我有一个正则表达式模式匹配 如下所示 val Regex d 4 d 2 d 2 r val Regex year month day 2013 01 06 结果是 year String 2013 month Stri
  • 从 Bash 中的字符串中删除固定前缀/后缀

    我想从字符串中删除前缀 后缀 例如 给定 string hello world prefix hell suffix ld 我如何得到以下结果 o wor prefix hell suffix ld string hello world f
  • 使用 pyscopg2 和 PostgreSQL 将日期时间插入数据库

    我在使用 pyscopg2 的 insert 语句将日期时间戳插入 SQL 数据库时遇到问题 下面的代码所做的是每次按下按钮时 它都应该在数据库中插入一行 其中包含buildingID 只是文本 以及按下按钮时的日期和时间 我只是不知道如何
  • Heroku: PG::ConnectionBad: 无法连接到服务器: 连接被拒绝

    我尝试将新应用程序推送到 heroku 并出现此错误PG ConnectionBad could not connect to server Connection refused 这是我的 gemfile 与此有关系吗 我正在使用 spre
  • 在一个命令中选择或插入一行

    我使用的是 PostgreSQL 9 0 我有一个表 其中只有一个人工键 自动递增序列 和另一个唯一键 是的 这个表是有原因的 我想通过另一个键查找 ID 或者如果它不存在 则插入它 SELECT id FROM mytable WHERE
  • SQL 中WITH 子句的使用指南

    我了解如何使用WITH递归查询子句 但我在理解它的一般用途 功能时遇到问题 例如 以下查询更新一条记录 其 id 是通过使用按时间戳返回第一条记录 id 的子查询来确定的 update global prospect psp set sta
  • 导出数据库的 CREATE 脚本

    假设我已经在 pgAdmin 中创建了一个数据库 但我想导出一个 CREATE sql 文件 我将如何生成转储 以下是如何使用 pgAdmin 创建一个架构脚本 该脚本可以与 PostgreSql 数据库架构比较工具 例如apgdiff h
  • 如何将点文本转换为几何图形

    我已经在我的数据库中安装了postgis 现在我的数据库中有 1 个区域 例如 79 4609576808001 43 9726680183837 我希望这个区域转换为几何类型 我在google上搜索发现St geomfromText会将文
  • 依靠条件连接大表的速度很慢

    当表很小时 这个查询有合理的时间 我试图找出瓶颈是什么 但我不知道如何分析EXPLAIN结果 SELECT COUNT FROM performance analyses INNER JOIN total sales ON total sa
  • 使用flask-sqlacodegen 为 Flask-App Builder 生成模型

    我是 Python 和 Flask 生态系统的初学者 尝试为研究项目创建一个小型概念验证 Web 应用程序 我正在使用 Debian Linux 7 9 PostgreSQL 9 5 SQLAlchemy 最新 和 Flask AppBui
  • 如何将 Postgres JSONB 数据类型与 JPA 结合使用?

    我没有找到使用 JPA EclipseLink 从 PostgreSQL 映射 JSON 和 JSONB 数据类型的方法 有人在 JPA 中使用这种数据类型并且可以给我一些工作示例吗 所有答案都帮助我找到了适合 JPA 的最终解决方案 而不
  • 将数组插入postgresql

    我想将 id 数组插入到文件中 但在创建我使用的表时int 并且它具有另一个表的引用 现在如何将数组值存储到特定字段 我知道列必须是相同的类型 而且我还看到有些人已经尝试解决数组问题上的外键 我也根据这个文档尝试过 ELEMENT 但没有成

随机推荐