postgresql 数组上的RedShift自连接

b1zrtrql  于 12个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(161)

我在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

mitkmikd

mitkmikd1#

看起来像是在Redshift中处理数组处理。不要使用ANY条件,尝试使用UNNEST扩展数组,然后连接元素

SELECT a.ProductID, a.product, b.product as Parent
FROM sandbox.productmk2 a
JOIN sandbox.productmk2 b ON b.productid = 
UNNEST(a.parentid)

字符串

c6ubokkw

c6ubokkw2#

我已经找到了一种方法来获得一个工作解决方案,尽管它远非优雅(我不喜欢加入where子句)。
如果有人能改进这一点,我会非常渴望学习!

SELECT A.*, C.PRODUCT AS Parent
FROM sandbox.productmk2 AS A , a.parentid AS b, sandbox.productmk2 AS C
WHERE B = C.productid;

字符串

相关问题