Redshift 中逗号分隔字段中的匹配值

Matching values in a comma seprated field in Redshift

我在Redshift中有2个表如下:

T1:

QID   EID
Q1    a.1,a.2
Q2    a.5,a.4,a.8
Q3    a.7
Q4    a.3,a.5

T2:

EIDs
a.1
a.2
a.4
a.7

我想 select 仅 T1 中包含 T2.EIDs 中任何可用值的记录。 因此,如果 T2.EIDs 中存在的任何值在逗号分隔字段 T1.EID 中可用,那么我想 select 来自 T1 的记录。对于给定的示例,这是我想要的结果集:

QID   EID
Q1    a.1,a.2
Q2    a.5,a.4,a.8
Q3    a.7

我知道 LIKESIMILAR TO 子句会在这里发挥作用,但我似乎无法想出能让它发挥作用的东西。

最终查询可能类似于:

SELECT T1.*
FROM T1 JOIN T2 ON <cannot think of a proper join condition>

如有任何帮助,我们将不胜感激。

这是一个糟糕的数据模型。 CSV 列表中的每个值都应存储在不同的行中,而不是连接在一个字符串中。这样查询就容易写,效率高

对于您当前的设计,您可以像这样使用字符串函数:

select t1.*
fom t1
where exists (select 1 from t2 where ',' || t1.eid || ',' like '%,' || t2.eid || ',%')