2016-11-17 6 views
2

Postgres SQL에 관한 빠른 질문이 있습니다.postgres에있는 하위 제품의 재귀 목록 SQL

내 목표는 제품 테이블에 당사가 하나 이상의 상위 제품이 있고 특정 하위 제품이있는 테이블입니다. 다른 테이블에서

product schema

난 그냥 그것을 특정 제품의 판매를 넣어 판매. 내 SQL에 이제

sales schema

:

내가 bascially 하위 제품의 매출 합계와 모바일 및 가정 내 예에서, superparent 제품 당 모든 판매를 검색 할 수 있습니다. 지금까지

내 SQL : 미리

WITH RECURSIVE assignDepth (id, depth, parent) AS (
    SELECT p.id, 0 as depth, p.parent 
    FROM product p 
    WHERE p.parent IS NULL 
    UNION ALL 
    SELECT p.id, c.depth+1, p.parent 
    FROM product p, assignDepth c 
    WHERE p.parent = c.id 
), 
    getProductValue (id, name, value, parent) AS (
    SELECT p.id, p.name, 0 as value, p.parent 
    FROM product p, 
    WHERE p.depth = (SELECT MAX(depth) FROM assignDepth) 
    UNION ALL 
     SELECT p.id, p.name,SUM(
      SELECT s.value 
      FROM sales s 
      WHERE c.id = s.product), p.parent 
    FROM product p, getProductValue c 
    WHERE p.id = c.parent 
) 
SELECT * FROM getProductValue; 

덕분에, 어떤 도움에 감사드립니다! :)

답변

0

나는 하나의 재귀만으로 그것을 스스로 해결했다.

WITH RECURSIVE getProductValue (i, n, par) AS 
(SELECT id as i, name as n, id as par FROM product 
    UNION all 
     SELECT product.id AS i, product.name AS n, getProductValue.par 
     FROM product, getProductValue 
     WHERE product.parent=getProductValue.i) 
SELECT par, SUM(value) 
FROM getProductValue, sales 
WHERE par<>i 
AND sales.product=getProductValue.i 
GROUP by par; 

누구나 관심있는 솔루션입니다.