메뉴테이블, 재료테이블,재료입력테이블, 판매테이블이 있습니다. (식당관련)
메뉴테이블에는 음식에 관한 정보들이 있고, 재료테이블에는 각 음식에 들어가는 재료(돼지고기, 마늘, 양파, 감자...)에 대한 정보와 재료의 재고정보를 가지고 있습니다.
재료입력테이블에는 메뉴테이블에 있는 각 음식에 얼만큼의 재료가 들어가는지 입력을 합니다.
예)
<재료입력테이블> <재료테이블>
음식명 재료번호 수량 재료번호 재료명 재고량
------------------------ ---------------------------
불고기 1111 50 1111 돼지고기 100
불고기 2222 10 2222 양파 2
불고기 3333 10 3333 양념 10
여기서 재료입력테이블은 음식명과 재료번호가 기본키이고 재료테이블은 재료번호가 기본키입니다. 그리고 판매테이블은 판매번호가 기본키이고 음식명을 가지고 있습니다. (이해가 되셨는지?)
여기서 구현하고 싶은 것은 음식이 판매가 되었을 때 각 재료의 재고가 계산되도록 하는 것입니다. 보시다시피 한가지 음식에 관련된 재료가 여러가지입니다.
저는 이렇게 할려고 했는데 잘 안되는군요.
판매테이블의 음식명을 가지고 재료입력테이블의 재료번호를 찾아서 수량을 가지고 옵니다. 이 수량에 판매테이블의 판매된 음식수량을 곱한뒤 재료테이블의 재고량에서 빼는거죠. 그런데 재료입력테이블에서 한 음식에 들어가는 재료가 한가지이면 간단한데 여러가지라 그게 잘 안되는군요.
좋은 방안 있으시면 부탁드립니다.
> 메뉴테이블, 재료테이블,재료입력테이블, 판매테이블이 있습니다. (식당관련)
> 메뉴테이블에는 음식에 관한 정보들이 있고, 재료테이블에는 각 음식에 들어가는 재료(돼지고기, 마늘, 양파, 감자...)에 대한 정보와 재료의 재고정보를 가지고 있습니다.
> 재료입력테이블에는 메뉴테이블에 있는 각 음식에 얼만큼의 재료가 들어가는지 입력을 합니다.
>
> 예)
> <재료입력테이블> <재료테이블>
> 음식명 재료번호 수량 재료번호 재료명 재고량
> ------------------------ ---------------------------
> 불고기 1111 50 1111 돼지고기 100
> 불고기 2222 10 2222 양파 2
> 불고기 3333 10 3333 양념 10
>
> 여기서 재료입력테이블은 음식명과 재료번호가 기본키이고 재료테이블은 재료번호가 기본키입니다. 그리고 판매테이블은 판매번호가 기본키이고 음식명을 가지고 있습니다. (이해가 되셨는지?)
>
> 여기서 구현하고 싶은 것은 음식이 판매가 되었을 때 각 재료의 재고가 계산되도록 하는 것입니다. 보시다시피 한가지 음식에 관련된 재료가 여러가지입니다.
>
> 저는 이렇게 할려고 했는데 잘 안되는군요.
> 판매테이블의 음식명을 가지고 재료입력테이블의 재료번호를 찾아서 수량을 가지고 옵니다. 이 수량에 판매테이블의 판매된 음식수량을 곱한뒤 재료테이블의 재고량에서 빼는거죠. 그런데 재료입력테이블에서 한 음식에 들어가는 재료가 한가지이면 간단한데 여러가지라 그게 잘 안되는군요.
>
> 좋은 방안 있으시면 부탁드립니다.
>
먼저 결론부터 말씀드리면 박성훈씨의 생각대로 한번에 해결할 수 있습니다.
위 예시자료에서 재료테이블의 재고량이 부족하여 적절하지는 않지만
불고기를 2인분 판매하였다고 가정하면 소요재료량은 아래와 같을것입니다.
===============================================
1111 돼지고기 100 (단위소요량 50 * 2)
2222 양파 20 (단위소요량 10 * 2)
3333 양념 20 (단위소요량 10 * 2)
===============================================
이는 박성훈씨 께서 생각하신 방법과 같이 판매테이블의 음식명으로 재료입력
테이블과 조인하면 얻을 수 있는 결과 입니다.
================================================
SELECT 판매테이블.판매량 * 재료입력테이블.재료량
FROM 판매테이블
LEFT OUTER JOIN 재료입력테이블 ON 판매테이.음식명 = 재료입력테이블.음식명
=================================================
상기 결과값을 재료테이블의 재고량에서 감해주면 원하는 결과를 얻을 수 있습니다.
Query 컴포넌트를 이용하여 아래와 같이 SQL을 작성한 뒤 실행해 보십시요.
========================================================================
UPDATE 재료테이블 SET 재고량 = 재고량 -
(SELECT 판매테이블.판매량 * 재료입력테이블.재료량
FROM 판매테이블
LEFT OUTER JOIN 재료입력테이블 ON 판매테이블.음식명 = 재료입력테이블.음식명
WHERE 재료입력테이블.재료번호 = 재료테이블.재료번호
)
=========================================================================
단 위와 같이 SQL을 작성하여 실행하면 판매테이블의 모든 판매실적을 기준으로 재고량을 감산하기 때문에 WHERE 조건에 특정 판매건의 조건을 추가하셔야합니다.
판매테이블의 키 항목을 알려주지 않아 예를 들 수 없지만 아래와 같은 개념으로 추가해 주세요
========================================================================
UPDATE 재료테이블 SET 재고량 = 재고량 -
(SELECT 판매테이블.판매량 * 재료입력테이블.재료량
FROM 판매테이블
LEFT OUTER JOIN 재료입력테이블 ON 판매테이블.음식명 = 재료입력테이블.음식명
WHERE 재료입력테이블.재료번호 = 재료테이블.재료번호
AND 판매테이블.키값 = :키값
)
=========================================================================