You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Amazon Redshift中查询包含表B关键词的表A所有行的SQL实现

问题描述

在Amazon Redshift数据库中,我有一张包含数十万行数据的表A,其包含一个存储字符串的name字段,数据示例如下:

Name
Thor
Spiderman
The Amazing Spiderman
Superman
Hulk
Jonas The Fish
Fish Billy

另有一张包含数千行数据的表B,其包含一个存储关键词的Keyword字段,数据示例如下:

Keyword
Amazing Spiderman
Fish

需要从表A中筛选出所有包含表B中任意关键词的行,期望结果如下:

Name
The Amazing Spiderman
Jonas The Fish
Fish Billy

请问实现该需求的正确SQL语句是什么?

解决方案

你可以通过关联查询结合字符串匹配逻辑实现需求,Redshift支持两种常用写法:

方法一:使用LIKE模糊匹配

SELECT DISTINCT a.name
FROM table_a a
JOIN table_b b ON a.name LIKE '%' || b.keyword || '%';
  • 用||拼接通配符与关键词,构造包含匹配的条件
  • 加DISTINCT避免表B存在多个匹配关键词时,表A的同一条记录重复输出

方法二:使用POSITION函数

SELECT DISTINCT a.name
FROM table_a a
JOIN table_b b ON POSITION(b.keyword IN a.name) > 0;
  • POSITION函数返回关键词在name字段中的起始位置,返回值大于0即代表包含该关键词
  • 同样用DISTINCT保证结果唯一性

性能优化提示

因为表A数据量较大,关联查询可能产生性能开销,可尝试:

  • 给表A的name字段创建全文索引(若业务场景允许)
  • 提前清理表B中的无效、重复关键词,减少关联匹配次数

内容的提问来源于stack exchange,提问作者Boby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:35:28