我在Redshift中有一个自引用ParentID
的表,要连接回ProductID
以创建层次结构。
基本结构(全表为c6 k记录,数组最多90个ID):
CREATE TABLE sandbox.productmk2 (
productid integer ENCODE az64,
product character varying(500) ENCODE lzo,
parentid super
)
DISTSTYLE AUTO;
字符串
| productId|产品|parentId|
| --|--|--|
| 1 |头饰|[0]
个|
| 2 |毛织品|[0]
个|
| 3 |帽子|[1,2]
个|ParentID
存储为SUPER类型,包含一个数组。
从网上的一些研究来看,有人建议使用ANY条件。然而,我得到了以下错误,即使我再次将其转换为数组。
- 错误:op ANY/ALL(array)需要数组在右边 *,
SELECT a.ProductID, a.product, b.product as Parent
FROM sandbox.productmk2 A
JOIN sandbox.productmk2 b on b.productid = ANY(a.parentid)
型
预期输出
| productId|产品|母|
| --|--|--|
| 3 |帽子|头饰|
| 3 |帽子|毛织品|
将ANY(a.parentid)
更改为a.parentid[0]
成功地加入了第一个ID,因此数组看起来存储正确。
关于ALL
运算符,我是否遗漏了什么,或者是否有更好的方法来处理这个问题?
不幸的是,它的研究具有挑战性,考虑到这是Redshift中相对较新的功能,并且我遇到的大多数文章都说RS中不支持数组。
Thanks in advance
2条答案
按热度按时间mitkmikd1#
看起来像是在Redshift中处理数组处理。不要使用ANY条件,尝试使用UNNEST扩展数组,然后连接元素
字符串
c6ubokkw2#
我已经找到了一种方法来获得一个工作解决方案,尽管它远非优雅(我不喜欢加入where子句)。
如果有人能改进这一点,我会非常渴望学习!
字符串