하나의 테이블이 여러 1:1 관계를 가진경우에서 다음의 쿼리를 간단하게 해보고 싶습니다 ㅠㅠ 0 2 582

by momo [SQL Query] 쿼리 [2022.01.01 17:48:30]


SELECT u.*, case when (
				SELECT d.dt_id
                FROM dt d
                WHERE d.user_id = "test3"
			) IS NOT NULL then (
				SELECT d.dt_id
                FROM dentist d
                WHERE d.user_id = "test3"
			)
            when (
				SELECT t.tn_id as b
                FROM tn t
                WHERE t.user_id = "test3"
			) IS NOT NULL then (
				SELECT t.tn_id as b
                FROM tn t
                WHERE t.user_id = "test3"
			) 
            END
FROM user u;

 

하나의 사용자가 dt, tn이라는 테이블과 각각 1:1을 맺고 있습니다.

다만 사용자가 dt를 선택해서 dt에 정보가 insert 되면 더이상 tn이라는 테이블에는 데이터를 넣을 수 없고, 그 반대에도 마찬가지입니다. 

그래서 사용자는 dt, tn이라는 테이블과 각각 1:1 관계를 맺고 있기는 하지만 관련 데이터는 둘 중 하나에만 들어가는 상황입니다.

 

이 경우에 "test3" 사용자 id를 이용해서 dt 테이블과 tn 테이블에 데이터가 존재하는지 확인하고, 있다면 해당 dt_id 혹은 tn_id를 뽑아내고 싶습니다.

 

일단 case 문으로 작성을 해서 원하는 결과는 나오는것 같지만 쿼리가 너무 엉망인것 같습니다 ㅠㅠ. 이 쿼리를 어떻게 해야 간단하게 만들 수 있을까요??

 

 

by 창조의날개 [2022.01.03 16:11:07]
SELECT U.*
            , NVL(D.DT_ID, T.TN_ID)
FROM USER U
LEFT OUTER JOIN DT D ON U.USER_ID = D.USER_ID
LEFT OUTER JOIN TN T ON U.USER_ID = T.USER_ID
WHERE U.USER_ID = 'test3'
;

 


by momo [2022.04.11 10:55:54]

앗 답변 달아주셨는데 제가 너무 늦게 확인했네요. 정말 감사합니다 

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