2016-09-29 2 views
0

에서 여러 값을 가져 오는 다른 테이블의 값을 기반으로 테이블의 모든 행을 업데이트하므로 Microsoft SQL Server의 데이터베이스에 세 개의 테이블이 있습니다.세 번째 테이블

이 시스템은 학습을위한 예제이며 테이블 A를 포함하고 있습니다.이 테이블에는 물건을 구입할 때 사용 된 총 금액과 ID가있는 학교가 있습니다.

표 B 당신이 물건의 ID와

표 C 모든 명령을 포함

가격 및 ORDER_ID, school_id, stuff_id 및 금액 살 수있는 물건을 포함

내 문제는 이것입니다

, 나는에있다 표 C에 값이 삽입되면 모든 학교의 총 금액이 갱신되는 트리거를 작성하십시오. 그리고 나는 그 일을하는 법을 알 수 없습니다. 특히 구입 한 물건의 양을 계산해야하기 때문에 특히 그렇습니다.

당신은 내가 당신이 그것을 할 수처럼 SQL을 보려면 :

select c.school_id, sum(b.price) 
from b join 
    c 
    on b.stuff_id = b.stuff_id 
group by c.school_id; 

당신 사용 트리거 : http://sqlfiddle.com/#!6/265f0

+2

실시간 값의 경우 표에 합계가있는 대신 합계를 계산하는보기를 만듭니다. 그런 다음보고 작업을 위해 필요할 경우 매일 밤 예약 된 작업에서 테이블의 합계를 업데이트 할 수 있습니다. –

+0

트리거가 'INSERT'(새 오더), 'UPDATE (변경된 오더)'및 'DELETE (삭제 된 오더)'를 처리하지 않겠습니까? 가격 변화를 어떻게 처리 할 것인지 생각 해봤습니까? 학교가 주문을하고, 가격이 바뀌면 학교는 주문한 수량을 변경합니까? 또는 테이블에 대한 직접적인 변경을 방지하고 사용자가 온 전성 검사를 구현하는 저장 프로 시저 (예 : 주문한 수량이 0보다 큽니까? 방아쇠 (들)을 가지고 가면 명령문마다 한 번씩 실행되지만 명령문은 여러 행에 영향을 줄 수 있습니다. – HABO

답변

1

당신이처럼 쿼리를 할 수 있습니다. 그러나 이것은 삭제되고 업데이트되는 레코드를 처리 할뿐만 아니라 레코드를 삽입해야하기 때문에 훨씬 더 복잡해집니다.

+0

감사합니다. – Krysvac

관련 문제