두개의 테이블 조인시 조건 좀 봐주세요 0 4 748

by 데미소다a [SQL Query] [2020.09.17 09:34:37]


ITEMMASTER 테이블에 ITEMID, ITEMNAME 컬럼이 있고

ITEMSTR 테이블에 TARITEM, SRCITEM, MGRNO 컬럼이 있습니다.

두개의 테이블을 조인을 해서 데이터를 조회를 하려고 하면 데이터가 중복으로 조회가 되는데요

ITEMID 가 TARITEM 또는 SRCITEM 중에 하나라도 있으면 데이터를 찾아와야 하는 쿼리거든요

어떻게 손을 봐야 할지 모르겠습니다.

도움 부탁드립니다.

이건 제가 짜본 쿼리 입니다.

SELECT 
       itemid
     , itemname
     , taritem 
     , srcitem  
     , COUNT( mgrno ) cnt
  FROM 
       itemmaster
     , itemstr
 WHERE 
       itemid IN( taritem, srcitem ) 
 GROUP BY 
       itemid
     , itemname
     , taritem 
     , srcitem  
ORDER BY 
       itemid
     , itemname

 

결과:

itemid itemname taritem srcitem cnt
00001 TESTITEM 00001 00002 1
00002 null 00001 00002 1

 

by 마농 [2020.09.17 11:21:11]

뭐가 문제인가요? 어디가 중복인거죠?
원본 테이블에 동일한 itemid 에 itemname 이 다른 자료가 있는 건가요?
쿼리에는 문제가 없어 보이는데요?


by 데미소다a [2020.09.17 12:34:15]

결과에 itemid 를 잘못적었습니다

대충 저희 테이블을 DUAL로 만들면

SELECT 
       itemid 
     , itemname 
     , taritem 
     , srcitem 
     , COUNT( mgrno ) cnt 
  FROM 
       ( 
       SELECT '00001' itemid, 'TESTITEM' itemname FROM dual UNION 
       SELECT '00002', '' FROM dual  
       ) itemmaster 
     , 
       ( 
       SELECT '00001' taritem, '00002' srcitem, 1 mgrno FROM dual UNION
       SELECT '00003' taritem, '00004' srcitem, 1 mgrno FROM dual  
       ) itemstr 
 WHERE 
       itemid IN( taritem, srcitem ) 
 GROUP BY 
       itemid 
     , itemname 
     , taritem 
     , srcitem 
 ORDER BY 
       itemid 
     , itemname 
     , taritem 
     , srcitem 

 

이와 같은 형태인데

제가 원하는 결과는

itemid itemname taritem srcitem cnt
00001 TESTITEM 00001 00002 1

이렇게 하나의 행만 표시되게 하고 싶거든요


by bbugge [2020.09.17 12:27:18]

select 
itemid,
itemname,
taritem,
srcitem,
cnt 
from(
select 
itemid,
itemname,
taritem,
srcitem,
count(*) over(partition by itemid,itemname,taritem,srcitem) as cnt
from itemmaster,itemstr
where itemid = taritem
union
select 
itemid,
itemname,
taritem,
srcitem,
count(*) over(partition by itemid,itemname,taritem,srcitem) as cnt
from itemmaster,itemstr
where itemid = srcitem
) T
order by itemid,itemname;

 

어떤 걸 원하시는 지 정확히 모르겠는데 대충 이런 거 인 듯해서 작성해봤습니다.


by 마농 [2020.09.17 12:57:22]

예시 자료엔 중복도 없네요.
하나의 행만 나오게 한다는 표현의 정확한 의미가 뭔가요?
여러 건이 있어도 그중에 한건만 출력한다는 건가요?
1번 아이템 하나만 출력하고 2번 아이템은 출력 안한다는 건가요?

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