이럴 때 어떤 방법이 있을려는지요? SQL 쿼리 질문 드립니다. 0 6 781

by GPLWorkerG [SQL Query] [2022.02.17 17:02:35]


SELECT A.* FROM tbl_a A 
LEFT JOIN tbl_b B ON A.name=B.name
WHERE A.name='홍길동'
ORDER BY A.date DESC

위의 쿼리에서 '홍길동'에 해당하는 값이 tbl_b에 있는데(unique할때)
tbl_b에 있는 name만큼 
tbl_a의 모든 값을 select 하고자 합니다.
도움 부탁드립니다.
감사합니다.

※ 질문 정보가 부족했습니다.

위와 같이 할 경우 

홍길동, ...
홍길동, ...
홍길동, ...
차선생, ...
차선생, ...
고길동, ...
고길동, ...

와 같이 출력될 때 원하는 결과는 각 이름의 가장 최근 정보만 하나씩만 나오게 하는 것입니다.

홍길동, ...
차선생, ...
고길동, ...

감사합니다.

by 미르지니 [2022.02.17 17:14:42]

그냥 이름 조건 없이 Inner 조인하면 될듯요. 

SELECT A.* FROM tbl_a A 
inner JOIN tbl_b B ON A.name=B.name
ORDER BY A.date DESC


by GPLWorkerG [2022.02.17 17:22:54]

질문 정보가 부족했습니다. 위에 내용 추가했습니다. 감사합니다.


by GPLWorkerG [2022.02.17 17:40:29]

프로그램 소스 코드에서 for문으로 tbl_b의 name을 가져와서 아래와 같이 하는 방법 밖에는 없는 것일까요? 쿼리만으로 해법이 없을까요?

SELECT A.* FROM tbl_a A 
LEFT JOIN tbl_b B ON A.name=B.name
WHERE A.name=#{name}
ORDER BY A.date DESC LIMIT 1


by 미르지니 [2022.02.17 17:44:55]

with ta as (
select '홍길동' as name , '서울' as addr , 24 as age , sysdate -2 as date1 from dual union all
select '홍길동' as name , '서울' as addr , 24 as age , sysdate -3 as date1 from dual union all  

select '차선생' as name , '서울' as addr , 24 as age , sysdate -1 as date1 from dual union all
select '차선생' as name , '서울' as addr , 24 as age , sysdate -4 as date1 from dual union all  

select '고길동' as name , '서울' as addr , 24 as age , sysdate -5 as date1 from dual union all
select '고길동' as name , '서울' as addr , 24 as age , sysdate -2 as date1 from dual 
) , tb as (
select '홍길동' as name from dual union all
select '차선생' from dual union all
select '고길동'  from dual 
)
select * 
from (
select ta.*  , row_number() over ( partition by ta.name order by ta.date1 desc) as rn 
from ta inner join tb on ta.name = tb.name 
) tt where tt.rn=1 


by 마농 [2022.02.18 07:56:42]

최근 정보를 가져오려면 순서를 알 수 있는 컬럼 정보(순번이나, 일시 등)가 필요합니다.
그걸 이용해 row_number 를 사용해 푸시면 됩니다. 위 댓글 참조
그리고, 조인이 필요한 것인지도 고민해 보시길 바랍니다. 조인이 필요 없을 수도 있습니다.


by GPLWorkerG [2022.02.18 17:01:16]

답변 주신분들 대단히 감사합니다.

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