0

假设我们有三张桌子

category_level_one

ID 猫名
1 物理
2 化学

category_level_two

ID 子猫名 cat_l1_id
1 有机的 2
2 无机的 2
3 身体的 2
4 力学 1
5 电和磁 1

category_level_three

ID 子猫名 cat_l1_id cat_l2_id
1 原子和分子 2 3
2 化学平衡 2 3
3 醇类 2 1
4 醚类 2 1
5 P 块元素 2 2
6 运动学 1 4
7 工作功率和能量 1 4
9 当前电力 1 5
SELECT category_level_two.id, category_level_two.sub_cat_name, 
JSON_OBJECT("id" , category_level_one.id, 'name', category_level_one.cat_name ) AS "categotyOne", 
(select json_arrayagg(JSON_OBJECT(
                                'id', category_level_three.id,
                                'name', category_level_three.sub_sub_cat_name))
                            from category_level_two
                            INNER JOIN category_level_three  
                            ON category_level_three.cat_l2_id = category_level_two.id
                            WHERE category_level_two.id = 1)  as "categotyThree",
FROM category_level_two
JOIN category_level_one 
ON category_level_two.cat_l1_id = category_level_one.id  
WHERE category_level_two.id WHERE = 1

它将提供数据为

ID 姓名 类别一 类别三
1 有机的 {“id”:1,“名称”:“化学”} [ {...} , {...}]

如何使用属于该 catl2 的每个 categotyThree 列表获取 category_l2 的多个唯一行?

4

1 回答 1

0
SELECT JSON_OBJECT('data', JSON_ARRAYAGG(output)) results
FROM (
    SELECT JSON_OBJECT(
        'name', p2.sub_cat_name, 
        'cat_l2_id', p2.id,
        'cat_l1_id', p1.id,
        'namel1' , p1.cat_name,
        'cat1', JSON_OBJECT("id" , p1.id, 'name', p1.cat_name ), 
        'catl2', JSON_ARRAYAGG(
            JSON_OBJECT(
                'cat_l2_id', p2.id, 
                'name', p3.sub_sub_cat_name, 
                'cat_l3_id', p3.id
            )
        )
    ) output,
    p1.id as 'cat1',
    p2.id as 'cat2',
    p3.id as 'cat3' 
    FROM category_level_two  p2
    JOIN category_level_three p3
    ON p2.id = p3.cat_l2_id  
    JOIN category_level_one p1
    ON p2.cat_l1_id = p1.id  
    WHERE p2.id IN (2,4)
    GROUP BY p2.id
) x
于 2021-08-25T16:20:47.780 回答