Redshift中有两个表,如下所示:
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我只想从T1中选择包含T2.EIDs中任何可用值的记录。因此,如果T2.EIDs中的任何值在逗号分隔的字段T1.EID中可用,那么我希望从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>任何帮助都将不胜感激。
发布于 2020-12-21 23:20:10
这是一个糟糕的数据模型。CSV列表中的每个值都应该存储在不同的行中,而不是串连在字符串中。那么查询就很容易编写,效率也很高。
对于当前的设计,可以使用以下字符串函数:
select t1.*
fom t1
where exists (select 1 from t2 where ',' || t1.eid || ',' like '%,' || t2.eid || ',%')https://stackoverflow.com/questions/65401256
复制相似问题