본문 바로가기

Frontend/jQuery & JSTL

[SQL] subquery & join 작업

반응형

dataseq에 대한 data테이블의 요소가 group테이블에 포함된 데이터 인지를 Y, N으로 구분하려고 하였다.

작업하면서 subquery와 join을 같이 사용할때의 개념이 정확하게 인식되지 않은 것 같아 작성해보았다.

 

// 이렇게 하면 join으로 seq가 동일한 데이터를 가져오기 때문에 전체가 Y로 체크됨

SELECT c.group_seq
, c.group_title
, c.option_yn
, c.option_type
, c.group_sort
, c.use_yn
, c.group_code
, case when (select count(*) from public.dataset_request
				where dataset_request_seq = #{datasetRequestSeq} and dataset_list_seq = a.dataset_list_seq) > 0
	 		then 'Y'
	 		else 'N'
	    end chk_yn
from public.dataset a join public.cust_data_variable b on a.dataset_list_seq = b.dataset_list_seq
left join public.data_group c on b.data_variable_no = c.data_variable_no
left join public.dataset_request d on d.dataset_request_seq = #{datasetRequestSeq} and d.dataset_list_seq = a.dataset_list_seq
AND c.use_yn = 'Y'
WHERE a.dataset_seq = #{findSeq}
ORDER BY c.group_sort

 

 

// 이렇게 하면 data_seq와 일치하는 값은 dataset테이블에 존재하므로 dataseq가 포함된  group안의 dataseq만큼의 데이터가 중복으로 나타남

SELECT c.group_seq
, c.group_title
, c.option_yn
, c.option_type
, c.group_sort
, c.use_yn
, c.group_code
, case when (select count(*) from public.dataset_request
				where dataset_request_seq = #{datasetRequestSeq} and dataset_list_seq = a.dataset_list_seq) > 0
	 		then 'Y'
	 		else 'N'
	    end chk_yn
from public.dataset a join public.cust_data_variable b on a.dataset_list_seq = b.dataset_list_seq
left join public.data_group c on b.data_variable_no = c.data_variable_no
AND c.use_yn = 'Y'
WHERE a.dataset_seq = #{findSeq}
ORDER BY c.group_sort

 

 

// 정상쿼리문

SELECT c.group_seq
, c.group_title
, c.option_yn
, c.option_type
, c.group_sort
, c.use_yn
, c.group_code
, CASE WHEN c.group_seq IN (SELECT group_seq FROM public.dataset_request
		WHERE dataset_request_seq = #{datasetRequestSeq} and dataset_list_seq = a.dataset_list_seq )
	THEN 'Y'
	ELSE 'N'
	END chk_yn
FROM public.dataset a JOIN public.cust_data_variable b ON a.dataset_list_seq = b.dataset_list_seq
LEFT JOIN public.data_group c ON b.data_variable_no = c.data_variable_no
AND c.use_yn = 'Y'
WHERE a.dataset_seq = #{findSeq}
ORDER BY c.group_sort

 

 

반응형