with t as ( select 1 col1, 1 col2 from dual union all select 2 col1, 2 col2 from dual union all select 3 col1, 1 col2 from dual union all select 4 col1, 3 col2 from dual union all select 5 col1, 4 col2 from dual union all select 6 col1, 2 col2 from dual ) select distinct a.col1, a.col1 col2 from t a where exists (select 1 from t b where a.col1 = b.col2)
--intersect 이용 select col1, col1 col2 from t intersect select col2, col2 from t
네 문제 그대로 입니다.
아래가 제가 문제 풀이한 방식인대
조건에 맞게
MAX함수를 이용한거를 보자고 하신것 같아요 .
1
2
3
4
5
6
7
8
9
10
11
12
|
SELECT ONE.COL1
, TWO.COL2
FROM (SELECT *
FROM HRM_DB.DBO.TEST1 WITH(NOLOCK)
WHERE COL1 <= (SELECT MAX(COL1)
FROM HRM_DB.DBO.TEST1 WITH(NOLOCK))
)ONE
INNER JOIN
(SELECT DISTINCT COL2
FROM HRM_DB.DBO.TEST1 WITH(NOLOCK)
)TWO
ON ONE.COL1 = TWO.COL2
|
cs |
제가 만든 거 보다 더 의미있게 만드신 것 같은데요. 저는 의미없는 max인데용.
다만 아래 부분만 바꾸면 더 의미가 좋아지겠네요.
아.. max, distinct join을 이용해서 해당 문제를 풀어보라는 거군요~ 저는 그냥 결과 값만 나오면 되는 줄 알고 댓글 달았었네요. 저 형태로 만들어 보라고 했다면 group by와 distinct, join에 대한 이해를 해보라는 말인 것 같네요.
with t as ( select 1 col1, 1 col2 from dual union all select 2 col1, 2 col2 from dual union all select 3 col1, 1 col2 from dual union all select 4 col1, 3 col2 from dual union all select 5 col1, 4 col2 from dual union all select 6 col1, 2 col2 from dual ) select * from ( select max(col1) col1 -- max는 없어도 되는데.. 이상함 from t group by col1 ) a join ( select distinct col2 from t ) b on a.col1 = b.col2