连接具有不同大小数组的两列

问题描述 投票:0回答:1

我有一个表,查询结果:

SELECT o.id AS order_id,
       arrayMap(i -> i, range(1, o.quantity)) AS virtual_sku,
       s.sku AS sku
  FROM orders o
  LEFT JOIN (SELECT order_id,
                    groupArray(sku) AS sku
               FROM storage
              GROUP BY 
                    order) s
    ON o.id = s.order_id
订单_id 虚拟_sku sku
41273 [1,2,3] [12478431567,12478431568]

在此示例中,我有订单 41273,数量为 3,并且该订单中有两件商品,在仓库收到时具有唯一的 sku。

我想做这张桌子

订购 v_sku _sku
41273 1 12478431567
41273 2 12478431568
41273 3

我尝试

SELECT o.id AS order_id,
       virtual_sku,
       sku
 ARRAY JOIN
       virtual_sku AS v_sku,
       sku as _sku

如何避免“ARRAY-JOIN-ed 数组的大小不匹配”错误?

sql arrays clickhouse
1个回答
0
投票

可以使用enable_unaligned_array_join设置:

SELECT *
FROM
(
    SELECT
        41273 AS order_id,
        [1, 2, 3] AS virtual_sku,
        [12478431567, 12478431568] AS sku
)
ARRAY JOIN
    virtual_sku,
    sku
SETTINGS enable_unaligned_array_join = 1

/*
┌─order_id─┬─virtual_sku─┬─────────sku─┐
│    41273 │           1 │ 12478431567 │
│    41273 │           2 │ 12478431568 │
│    41273 │           3 │           0 │
└──────────┴─────────────┴─────────────┘
*/
© www.soinside.com 2019 - 2024. All rights reserved.