我有一个表,查询结果:
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 数组的大小不匹配”错误?
可以使用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 │
└──────────┴─────────────┴─────────────┘
*/