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
我知道 LIKE
和 SIMILAR 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 || ',%')
我在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
我知道 LIKE
和 SIMILAR 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 || ',%')