1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| WITH dummy_data AS (
SELECT 'group_a' AS group_id, 1 AS row_number, '[{"item":"a"},{"item":"b"}]' AS items
UNION ALL
SELECT 'group_a', 2, '[]' -- 空配列
UNION ALL
SELECT 'group_a', 3, NULL -- NULL
),
cross_join_unnest AS (
SELECT
group_id, row_number, item_order,
JSON_VALUE(item_element, '$.item') AS item_value
FROM
dummy_data,
UNNEST(JSON_EXTRACT_ARRAY(items)) AS item_element WITH OFFSET AS item_order
),
left_join_unnest AS (
SELECT
group_id, row_number, item_order,
JSON_VALUE(item_element, '$.item') AS item_value
FROM
dummy_data
LEFT JOIN UNNEST(JSON_EXTRACT_ARRAY(items)) AS item_element WITH OFFSET AS item_order
)
SELECT 'cross_join(comma)' AS join_type, row_number, item_order, item_value FROM cross_join_unnest
UNION ALL
SELECT 'left_join' AS join_type, row_number, item_order, item_value FROM left_join_unnest
ORDER BY join_type, row_number, item_order
|