programing

Insert 트리거를 설정하여 최대값을 다른 열에 저장합니다.

lastcode 2023. 10. 19. 22:21
반응형

Insert 트리거를 설정하여 최대값을 다른 열에 저장합니다.

내 테이블은 다음과 같습니다.

학생_id subject_id 맥스.
101 1 6
102 2 5
103 1 9
101 1 10
103 2 2
104 1 7

합계가 삽입되면 "max" 열이 자동으로 채워지길 원합니다.

예상 출력:

학생_id subject_id 맥스.
101 1 10 10
102 2 5 7
103 1 9 10
101 1 8 10
103 2 2 7
104 1 7 10

이를 위한 계기를 만들고 싶습니다.

이것은 잘 작동하는 나의 SELECT 문인데 어떻게 트리거에 넣을 수 있습니까?

WITH CTE AS (SELECT `subject_id`,MAX(`total`) AS MaxTotal
FROM results
GROUP BY `subject_id`
)
SELECT results.*,CTE.MaxTotal
FROM results
JOIN CTE ON results.`subject_id` = CTE.`subject_id`;

이렇게 했는데 오류가 너무 많이 났어요.

CREATE TRIGGER `max_score_before_INSERT` BEFORE INSERT ON `results`
FOR EACH ROW 
SET NEW.max = (WITH CTE AS (SELECT `subject_id`,MAX(`NEW.total`) AS MaxTotal
FROM results
GROUP BY `subject_id`
)
SELECT results.*,CTE.MaxTotal
FROM results
JOIN CTE ON results.`subject_id` = CTE.`subject_id`
);

A 내부에 있는 "새로운"을 참조할 수 없습니다.BEFORE트리거 유형입니다.행을 먼저 삽입한 다음 열을 다음과 같이 업데이트할 수 있습니다.AFTER트리거 유형:

CREATE TRIGGER `max_score_before_INSERT` AFTER INSERT ON `results`
FOR EACH ROW 
UPDATE     <your_table_name>
INNER JOIN (SELECT subject_id, 
                   MAX(total) AS total_max
            FROM <your_table_name>
            GROUP BY subject_id) cte
        ON <your_table_name>.subject_id = cte.subject_id
SET <your_table_name>.max = cte.total_max;

이 접근 방식은 이전 열도 업데이트합니다. 마치 최대가 되는 새 필드를 삽입하는 것처럼, 이미 존재하는 행도 업데이트할 수 있습니다.그렇지 않다면, 당신은 그 안에서 조건을 사용할 수 있습니다.UPDATE문:

CREATE TRIGGER `max_score_before_INSERT` AFTER INSERT ON `results`
FOR EACH ROW 
UPDATE     <your_table_name>
INNER JOIN (SELECT subject_id, 
                   MAX(total) AS total_max
            FROM <your_table_name>
            GROUP BY subject_id) cte
        ON <your_table_name>.subject_id = cte.subject_id
SET <your_table_name>.max = cte.total_max;
WHERE <your_table_name>.student_id = NEW.student_id
  AND <your_table_name>.subject_id = NEW.subject_id;

언급URL : https://stackoverflow.com/questions/72688317/set-insert-trigger-to-store-max-value-in-another-column

반응형