update case when 사용시 "ORA-00904: 열명이 부적합합니다" 라고 뜹니다 4

by 실러캔스 [SQL Query] [2023.02.14 10:17:25]


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에 없는 자료는 존재하지 않습니다

 

by ㅇㅇ준 [2023.02.14 10:36:53]

CASE  WHEN EXISTS(SELECT 1 FROM table1_EX N WHERE m.PR_ID = N.PR_ID)   THEN '1'
     ELSE '0'
     END;


by 실러캔스 [2023.02.14 16:05:43]

아 감사합니다. 초보자라 아직 배울게 많습니다. 이제 작동하네요. 정말 감사합니다


by 마농 [2023.02.14 11:04:58]

쿼리 안에 table1_EX 에 대한 표시가 전혀 없네요.
table1_EX 가 만약 table1 으로부터 추출한 것이라면?
추출 쿼리를 보여주세요.


by 실러캔스 [2023.02.14 16:04:08]

그냥 다 추출해서 엑셀로 배포한거를 담당들이 자기 것만 정렬해서 사용하던 거라 추출 쿼리는 없습니다 

그걸 DB에 최초 등록하려고 비교용 테이블(table1_EX)에 대상(PR_ID) 컬럼만 만들어서 엑셀 import 했었거든요

어쨌거내 해결했습니다. 감사합니다.^^


by 마농 [2023.02.15 09:02:16]
-- 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

 


by 실러캔스 [2023.02.15 09:31:06]

아 이건 조인 업데이트 방법이군요

여기서 단어로 검색할 때는 못찾았는데 링크 내용을 읽어보니 제가 찾던게 맞네요

알려주셔서 감사합니다


by 마농 [2023.02.15 09:40:14]

아! 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)
;

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입