2021.11.30
아래와 같이 돌렸을 때에 문제 발생
1292: Truncated incorrect DOUBLE value: ' '
UPDATE BP_COMPANY
SET
ModDate = '20211130142700'
WHERE CompId IN (SELECT * FROM
(SELECT A.CompId
FROM BP_COMPANY A
RIGHT JOIN(
SELECT D.CompId
FROM (SELECT D.CompId, COUNT(D.EntryId) AS '총회선수'
FROM BP_PRODENTRY D
WHERE D.UseFlag = 'Y'
GROUP BY D.CompId
) D
LEFT JOIN
(SELECT C.CompId, COUNT(Case When C.ProgState = 4 then 1 When C.ProgState = 5 then 1 end) as '해지해제회선'
FROM BP_PRODENTRY C
WHERE C.UseFlag = 'Y'
GROUP BY C.CompId
) C
ON D.CompId = C.CompId
WHERE C.해지해제회선 >= D.총회선수
GROUP BY D.CompId
) B
ON A.CompId = B.CompId
) bp_comp
)
여러가지 찾았던 방법
1) 여전히 오류 발생
지나고 보니 여기서 힌트를 얻을 것을 삽질했다.
SET 칼럼 = CONCAT(칼럼, '값')
2) 가령 아래와 같이 처리하는 경우 문제 발생의 원인이 되어
set 칼럼 = '값' and 칼럼2 = '값'
이렇게 수정하라는 (and -> ',' (comma) 로 변경) 글을 보았으나
난 이미 첫 쿼리문에 and를 빼고 작성했기 때문에 해당사항 없음
SET 칼럼 = '값', 칼럼2 = '값'
3) Where 조건의 CompId에 들어가는 값을 임의로 넣어서 돌려보면 이상이 없다. 그럼 update문 문제는 아니라는 것
이렇게 해도 정상
UPDATE BP_COMPANY
SET
ModDate = '20211130000000'
WHERE CompId IN (SELECT 1
union
SELECT 2
)
이렇게 해도 정상
UPDATE BP_COMPANY
SET
ModDate = '20211130000000'
WHERE CompId IN (1,2,3,4,5
)
4) 확실한건 IN 뒤에 들어가는 값의 형태가 문제라는 것
SELECT Alians 없애고 다시 수정해봄
SELECT * FROM -> SELECT CONCAT(칼럼, ',') FROM
으로 변경해주니 시간은 좀 소요되지만 업데이트 정상 완료
UPDATE BP_COMPANY
SET
ModDate = '20211130142700'
WHERE CompId IN (SELECT CONCAT(bp_comp.CompId, ',') FROM
(SELECT A.CompId
FROM BP_COMPANY A
RIGHT JOIN(
SELECT D.CompId
FROM (SELECT D.CompId, COUNT(D.EntryId) AS '총회선수'
FROM BP_PRODENTRY D
WHERE D.UseFlag = 'Y'
GROUP BY D.CompId
) D
LEFT JOIN
(SELECT C.CompId, COUNT(Case When C.ProgState = 4 then 1 When C.ProgState = 5 then 1 end) as '해지해제회선'
FROM BP_PRODENTRY C
WHERE C.UseFlag = 'Y'
GROUP BY C.CompId
) C
ON D.CompId = C.CompId
WHERE C.해지해제회선 >= D.총회선수
GROUP BY D.CompId
) B
ON A.CompId = B.CompId
) bp_comp
)
뭐든 해보고 보면 별거 아닌데 Syntax 문제는 언제나 눈알 빠질 것 같다.