Hal*_*oKu 5 sql snowflake-cloud-data-platform
我有两张桌子:
Books带列tag_ids(数组)
Tags带列tag_id(Varchar)
我有一个可视化工具需要将这些表连接在一起。我唯一可以控制的是连接条件。问题是我找不到办法让这个连接起作用。
这是我尝试过的:
FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON ( "tag_ids" = TO_ARRAY("tag_id"))
Run Code Online (Sandbox Code Playgroud)
这只适用于只有一个元素的数组。它不适用于以下情况:
标签 ID =
[
"211d1383-13a6-4bef-85d1-bf5eda11c8a7",
"2f6c332e-4726-4425-b364-e668e0f56582"
]
Run Code Online (Sandbox Code Playgroud)
标签 ID =
["211d1383-13a6-4bef-85d1-bf5eda11c8a7"]
Run Code Online (Sandbox Code Playgroud)
尝试做:
FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON ( ARRAYS_OVERLAP ("tag_ids" , TO_ARRAY("tag_id")) = TRUE ) )
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有效,但它确实是 certisian 产品并且需要 15+ 才能运行,所以我无论如何都不能使用它。
我要找的基本上是问
if tag_id exist in tag_ids
Run Code Online (Sandbox Code Playgroud)
我确信有一个简单的解决方案。
您想使用该array_contains功能。
FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON (array_contains(tag_id, tag_ids))
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档。
展平数组并join:
select b.*, t.*
from public.books b cross join
table(flatten(b.tags)) bt join
tags t
on bt.tags = t.tag_id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5712 次 |
| 最近记录: |