안녕하세요. 하기와 같이 데이터가 존재합니다.
DELETE 문을 구성하고싶은데
조건이 LOOP문으로 구성하고싶거든요.
각 이름, 세일기간종료, 재고개수에 따른 삭제조건을 넣고싶습니다.
apl_t테이블에서 입력개수가 eoh_t의 현재개수보다 작으면 삭제.
이때, apl_t 기간시작, 종료일은 eoh_t와 동일해야합니다.
하기정보 테이블명 : APL_T
| 이름 | 기간시작 | 기간종료 | 입력개수 |
| 사과 | 20230411 14:20 | 20230411 15:00 | 500 |
| 포도 | 20230410 11:30 | 20230410 12:30 | 300 |
| 딸기 | 20230410 19:00 | 20230412 20:00 | 200 |
하기정보 테이블명 : eoh_t
| 이름 | 세일기간시작 | 세일기간종료 | 입력개수 |
| 사과 | 20230411 14:20 | 20230411 15:00 | 1000 |
| 포도 | 20230410 11:30 | 20230410 12:30 | 280 |
| 딸기 | 20230410 19:00 | 20230412 20:00 | 195 |
결과
| 이름 | 세일기간시작 | 세일기간종료 | 현재개수 |
| 포도 | 20230410 11:30 | 20230410 12:30 | 300 |
| 딸기 | 20230410 19:00 | 20230412 20:00 | 200 |
요청사항이 명확하지 않습니다.
테이블이 두개인 건가요? 예시는 하나 뿐이네요?
각 테이블 예시와 원하는 결과표 예시가 필요합니다.
무얼 지우겠다는 건가요? 목적어가 불분명 합니다.
실시간이라면? 트리거를 원하는 걸까요?
내용 수정하였습니다
뭘 삭제하나요? 삭제 대상에 표시를 헤주시거나. 최종 결과표를 그려주세요.
-- 1. 삭제 대상 확인
SELECT *
FROM apl_t a
WHERE 입력개수 < (SELECT 현재개수
FROM eoh_t
WHERE 이름 = a.이름
AND 세일기간시작 = a.기간시작
AND 세일기간종료 = a.기간종료
)
;
-- 2. 삭제
DELETE
FROM apl_t a
WHERE 입력개수 < (SELECT 현재개수
FROM eoh_t
WHERE 이름 = a.이름
AND 세일기간시작 = a.기간시작
AND 세일기간종료 = a.기간종료
)
;
감사합니다 마농님
조회할 테이블 eoh_t가 너무커서
속도가 안나와
프로시저를만들어서 하기 부분에
a.이름,기간시작, 종료를 변수로 처리해 loop문 돌리고싶은데..도움좀 부탁드려요
SELECT 현재개수
FROM eoh_t
WHERE 이름 = a.이름
AND 세일기간시작 = a.기간시작
AND 세일기간종료 = a.기간종료
답변 감사합니다!
(이름, 세일기간시작, 세일기간종료, 현재개수)
또는 (이름, 세일기간시작, 세일기간종료) 로 이루어잔 결합인덱스가 있어야 합니다.
루프를 돌리더라도 인덱스는 필요합니다.