mariadb 재귀쿼리질문드려요 ㅠㅠ 0

by 부산주니어 [2022.04.08 15:50:34]


테이블 데이터 및 결과는 첨부파일로 올렸습니다.

tb_plan에 저장된 품목의 tb_bom에 있는 데이터를 재귀호출하여 불러오는 쿼리입니다.


    WITH recursive 
    cte AS (
        SELECT P.`prd_code` as BOM_CODES,
                 p1.`code` AS BOM_CODEM,
                 1.00 as BOM_QTY,
                 1.00 * P.qty AS ND_QTY,
                 1 * P.qty AS LS_QTY,
                 p1.`name`,
                 1 as BOM_VER
        FROM      tb_prod p1,
               tb_plan P
        WHERE  P.prd_code = p1.`code`
          

         UNION ALL 
        SELECT b2.prd_codes BOM_CODES,
                 b2.prd_codem BOM_CODEM,
                 b2.bom_qty,
                 cte.ND_QTY * b2.bom_qty AS ND_QTY,
                 cte.LS_QTY * b2.bom_qty AS LS_QTY,
                 p1.`name`,
                 cte.BOM_VER+1 AS BOM_VER
        FROM   tb_bom b2
                 inner join cte
                  ON b2.prd_codem = cte.BOM_CODES,
                 tb_prod p1
        WHERE b2.prd_codes = p1.`code`
    ) SELECT * FROM cte;

이렇게 호출하면 닭갈비 소스의  qty는 3000인데 9.99로나오더라구요.

빨간색으로 표시된 부분을 1로 고치면 3000으로 똑바로 나오구요. 

계산식도 없고 cte에서 불러오는 열도아니고 tb_bom에서 불러오는 열인데 왜 바뀌는 건가요? 

 

 

by 마농 [2022.04.11 00:33:20]

1.00 으로 시작했을 때 Data Type 이 Decimal(3,2) 로 설정되는 듯 합니다.
그 이후 9.99 보다 큰 값이 들어와도 9.99 로 표기 되는 듯 하네요.
1 로 시작하면 INT 가 되어 소수점 계산은 안되지만 큰 수 인 3000 이 표시가 되긴 합니다.
명확하게 데이터 타입을 지정하시면 될 듯 합니다.
CAST(1.00 AS DECIMAL(9,2)) bom_qty

WITH RECURSIVE t AS
(
SELECT 1 lv
     , CAST(1.00 AS DECIMAL(3,2)) x
     , CAST(1.00 AS INT)          y
     , CAST(1.00 AS DECIMAL(9,2)) z
 UNION ALL
SELECT lv + 1
     , x + 1
     , y + 1
     , z + 1
  FROM t
 WHERE lv < 12
)
SELECT * FROM t
;
lv    x    y    z
 1  1.00   1   1.00
 2  2.00   2   2.00
 3  3.00   3   3.00
 4  4.00   4   4.00
 5  5.00   5   5.00
 6  6.00   6   6.00
 7  7.00   7   7.00
 8  8.00   8   8.00
 9  9.00   9   9.00
10  9.99  10  10.00
11  9.99  11  11.00
12  9.99  12  12.00

 


by 부산주니어 [2022.04.11 13:31:50]

감사합니다 ! 

궁금했던 점까지 해결이 되었습니다 ㅠㅠㅠ 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입