【问题标题】:Join on Id in Variant (Array) Snowflake加入变体(数组)雪花中的 ID
【发布时间】:2021-11-19 18:23:56
【问题描述】:

我创建了两个表 t1 和 t2,如下所示:

创建表格

CREATE TABLE t1(
    id integer AUTOINCREMENT START 1 INCREMENT 1,
    name varchar(10) DEFAULT RANDSTR(10, random()),
    id_array variant,
) 

CREATE TABLE t2(
    id integer AUTOINCREMENT START 1 INCREMENT 1,
    name varchar(10) DEFAULT RANDSTR(10, random())
)

目标

如果记录的 id 存在于 t1 变量数组中,我希望将 t2 加入到 t1。

我的尝试

我遇到了看起来很完美的 ARRAY_CONTAINS 函数。但是以下我没有收到任何结果:

SELECT t1.id, t2.name
FROM t1, t2 
WHERE ARRAY_CONTAINS(t1.id_array, array_construct(t2.id))

我如何得到这个?

对如何实现以下结果有什么建议吗?

t1 record: 
{id: 1, name: 'A-123', ids_array: '["1", "2"]'}

t2 records:
{id: 1, name: 'test'},
{id: 2, name: 'test2'}

期望的结果

{id: 1, name: 'A-123', joined_name: 'test'},

{id: 1, name: 'A-123', joined_name: 'test2'}

【问题讨论】:

    标签: sql snowflake-cloud-data-platform snowflake-schema snowflake-sql


    【解决方案1】:

    ARRAY_CONTAINS 需要以下参数:变量和数组:

    SELECT t1.id, t2.name
    FROM t1, t2 
    WHERE ARRAY_CONTAINS(t1.id_array, array_construct(t2.id))
    

    应该是:

    SELECT t1.id, t2.name
    FROM t1
    JOIN t2 
      ON ARRAY_CONTAINS(t2.id::variant, t1.id_array)
    

    【讨论】:

    • 有趣的是,这仍然不返回任何行。您认为 id_array 中的 id 用双引号括起来这一事实可能会产生什么影响吗?例如[“1”,“4”]
    猜你喜欢
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2020-08-27
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多