【发布时间】:2019-09-02 17:14:39
【问题描述】:
我需要返回我的类别以及每个部门的商品数量,父类别必须从子类别继承每个类别的产品数量。
类别
+-------------+----------+--------+ |编号 |姓名 | parent_id | +-------------+----------+--------+ | 1 |电子产品 |空 | | 2 |电视 | 1 | | 3 |管 | 2 | | 4 |液晶显示器 | 2 | | 5 |等离子 | 2 | | 6 |便携式电子产品 | 1 | | 7 | MP3 播放器 | 6 | | 8 |闪存 | 7 | | 9 | CD 播放器 | 6 | | 10 | 2 路收音机 | 6 | +-------------+----------+--------+产品
+-------------+----------+--------+ |编号 |产品 |类别 ID | +-------------+----------+--------+ | 1 |液晶电视 32" | 4 | | 2 |液晶电视 45" | 4 | | 3 |电视管 29" | 3 | | 3 | IPOD | 7 | +-------------+----------+--------+预期结果
+-------------+----------+------------ + |编号 |姓名 |等级|数量 | +-------------+----------+------------ + | 1 |电子产品 | 1 | 4 | | 2 |电视 | 2 | 3 | | 3 |管 | 3 | 1 | | 4 |液晶显示器 | 3 | 2 | | 5 |便携式电子产品 | 2 | 1 | | 6 | MP3 播放器 | 3 | 1 | +-------------+----------+------------ +我需要使用with递归,因为速度比使用嵌套要快很多
WITH RECURSIVE category_path (id, name, level, parent_id) AS
(
SELECT id, name, 1 level, parent_id
FROM categories
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.name, level + 1, c.parent_id
FROM category_path AS cp
JOIN categories AS c
ON cp.id = c.parent_id
)
SELECT * FROM category_path
Time: 0.020s
使用嵌套
SELECT
parent.id,
parent.name,
parent.parent_id,
COUNT(departaments.product_id)
FROM
categories AS node
INNER JOIN
categories AS parent
ON node.lft BETWEEN parent.lft AND parent.rgt
INNER JOIN
departaments
ON node.id = departaments.categorie_id
GROUP BY
parent.id
ORDER BY
node.lft;
Time: 1.510s
【问题讨论】: