UPDATE table1 m
SET CHK_ITEM =
CASE WHEN m.PR_ID = table1_EX.PR_ID THEN '1'
ELSE '0'
END;
-- 두 테이블 (table1,table1_EX) 에서 PR_ID가 같으면 table1의 CHK_ITEM 컬럼을 1로, 다르면 0으로 update 하려 하는데 에러가 뜨네요(ORA-00904: 열명이 부적합합니다)
-- 테이블 명이나 컬럼(NUMBER(3,1))은 이상이 없는거 같은데 뭐가 잘못되었을까요?
-- table1_EX는 table1에 조건줘서 추출한 거라 table1의 수보다 한참 작지만, table1에 없는 자료는 존재하지 않습니다
CASE WHEN EXISTS(SELECT 1 FROM table1_EX N WHERE m.PR_ID = N.PR_ID) THEN '1'
ELSE '0'
END;
아 감사합니다. 초보자라 아직 배울게 많습니다. 이제 작동하네요. 정말 감사합니다
쿼리 안에 table1_EX 에 대한 표시가 전혀 없네요.
table1_EX 가 만약 table1 으로부터 추출한 것이라면?
추출 쿼리를 보여주세요.
그냥 다 추출해서 엑셀로 배포한거를 담당들이 자기 것만 정렬해서 사용하던 거라 추출 쿼리는 없습니다
그걸 DB에 최초 등록하려고 비교용 테이블(table1_EX)에 대상(PR_ID) 컬럼만 만들어서 엑셀 import 했었거든요
어쨌거내 해결했습니다. 감사합니다.^^
-- MSSQL
UPDATE m
SET m.chk_item = CASE WHEN s.pr_id IS NOT NULL THEN 1 ELSE 0 END
FROM table1 m
LEFT OUTER JOIN table1_ex s
ON m.pr_id = s.pr_id
;
-- http://gurubee.net/article/79308
아 이건 조인 업데이트 방법이군요
여기서 단어로 검색할 때는 못찾았는데 링크 내용을 읽어보니 제가 찾던게 맞네요
알려주셔서 감사합니다
아! MSSQL 용을 잘못 올렸네요.
-- Oracle -- UPDATE table1 m SET chk_item = (SELECT NVL(MAX(1), 0) FROM table1_ex s WHERE s.pr_id = m.pr_id) ; MERGE INTO table1 m USING table1_ex s ON (m.pr_id = s.pr_id(+)) WHEN MATCHED THEN UPDATE SET chk_item = NVL2(s.pr_id, 1, 0) ;