Sql 比较表中的数组

Sql 比较表中的数组,sql,presto,Sql,Presto,我正在查询一些数据(SQL,presto),我正在努力连接两个表。我需要根据标记表中列出的团队标记,了解问题与哪些团队相关。每个问题都可能与许多团队相关 表1团队: name | tags ------+-------------------- team1 | [1234, 2345, 5678] team2 | [6789, 4321] team3 | [4530] team4 | [6532] team5 | [3452, 34234, 868686] 表2问题: issue_id |

我正在查询一些
数据(SQL,presto)
,我正在努力连接两个表。我需要根据标记表中列出的团队标记,了解问题与哪些团队相关。每个问题都可能与许多团队相关

表1
团队

name  | tags
------+--------------------
team1 | [1234, 2345, 5678]
team2 | [6789, 4321]
team3 | [4530]
team4 | [6532]
team5 | [3452, 34234, 868686]
表2
问题

issue_id | tags
---------+--------------------------------------------
   1     | [312312, 45345, 4535,1111,4533,4530, 4321 ]
   2     | [312312, 45345, 6532]
   3     | [6532]
   4     | [312312, 1234, 4321]
   5     | [312312]
我需要它看起来像:

issue_id | team
---------+--------
1        | team3
1        | team2
2        | team4
3        | team4
4        | team1
4        | team2

我希望避免硬编码,因为
团队
列表及其相关的
标记
可以是动态的,但不确定如何解决此问题

下面的SQL分解了两个表中标记的值,以将其从数组转换为单个值,这样它们就可以跨两个表合并,以查询和显示团队及其相应的问题

  Select T2.issue_id as issue_id,
             T1.name as team
  from
   (SELECT name, tag
    FROM table1
    CROSS JOIN UNNEST(tags) AS t (tag)) T1
   JOIN
  (SELECT issue_id, tag
    FROM table2
    CROSS JOIN UNNEST(tags) AS t (tag)) T2
  ON T1.tag = T2.tag;

下面的SQL分解两个表中标记的值,将其从数组转换为单个值,以便它们可以跨两个表连接,以查询和显示团队及其相应的问题

  Select T2.issue_id as issue_id,
             T1.name as team
  from
   (SELECT name, tag
    FROM table1
    CROSS JOIN UNNEST(tags) AS t (tag)) T1
   JOIN
  (SELECT issue_id, tag
    FROM table2
    CROSS JOIN UNNEST(tags) AS t (tag)) T2
  ON T1.tag = T2.tag;

我在Snowflake中遵循了您的示例,它具有
展平
功能。从我在普雷斯托的文件中看到的情况来看,它也有。也许这会有帮助

在《雪花》中,我设法满足了你的要求

with ISSUES as(

SELECT 
    T.ISSUE_ID,
    X.VALUE::INTEGER AS TAGS
FROM PUBLIC.ISSUES T, LATERAL FLATTEN(T.TAGS) X),

TEAMS as(
SELECT 
    T.TEAM,
    X.VALUE::INTEGER AS TAGS
FROM PUBLIC.TEAMS T, LATERAL FLATTEN(T.TAGS) X)


SELECT 
   ISSUES.ISSUE_ID, 
   TEAMS.TEAM FROM TEAMS
INNER JOIN ISSUES on TEAMS.TAGS = ISSUES.TAGS

我在Snowflake中遵循了您的示例,它具有
展平
功能。从我在普雷斯托的文件中看到的情况来看,它也有。也许这会有帮助

在《雪花》中,我设法满足了你的要求

with ISSUES as(

SELECT 
    T.ISSUE_ID,
    X.VALUE::INTEGER AS TAGS
FROM PUBLIC.ISSUES T, LATERAL FLATTEN(T.TAGS) X),

TEAMS as(
SELECT 
    T.TEAM,
    X.VALUE::INTEGER AS TAGS
FROM PUBLIC.TEAMS T, LATERAL FLATTEN(T.TAGS) X)


SELECT 
   ISSUES.ISSUE_ID, 
   TEAMS.TEAM FROM TEAMS
INNER JOIN ISSUES on TEAMS.TAGS = ISSUES.TAGS

谢谢它确实有扁平化,但在我使用的版本中,横向似乎不起作用。你的方法帮我弄明白了!很高兴听到。没问题!谢谢它确实有扁平化,但在我使用的版本中,横向似乎不起作用。你的方法帮我弄明白了!很高兴听到。没问题!