안녕하세요.
MSSQL을 사용하는 중에 안 풀리는 게 있어서 질문드립니다.
테이블A에는 정류장ID와 기타 정보가 있고,
테이블B에는 정류장ID, 정류장명, 행정동ID가 있습니다.
정류장ID를 이용하여 테이블A에 테이블B에 있는 행정동ID를 붙이려고 left outer join을 사용하여서 오류없이 잘 실행이 되었습니다.
문제는 테이블A에 있는 정류장ID에 관한 모든 행정동ID가 테이블B에 있는데 NULL값이 뜨는 겁니다.
(처음에는 outer join이 아니라 join을 실행했는데 행수가 달라서 outer join으로 실행하였습니다.)
그래서 확인을 하려고
테이블A에서 NULL값이 붙어있는 정류장ID를 테이블B에서 찾으면(where사용) 테이블B에 그 정류장ID에 대한 행정동ID가 있습니다.
왜 테이블 B에 있는 행정동ID가 테이블A에 제대로 안 붙을까요??
사용한 쿼리문은 다음과 같습니다.
select a.*, isnull(b.행정동ID,'') as 행정동ID
into [교통카드].[dbo].[테이블C]
from [교통카드].[dbo].[테이블A] as a
left outer join [교통카드].[dbo].[테이블B] as b
on(a.정류장ID=b.정류장ID)
Comment 4
-
항해자™
2014.10.22 21:52
-
임쑤
2014.10.23 13:48
답변감사합니다. 정류장id는 7자리숫자나 4자리 숫자로 되어있습니다.
inner join으로 했는데 안되서 안 붙은 정류장id가 무엇인지 보고자 outer join으로 돌려본거라서요....
-
항해자™
2014.10.23 14:43
그럴 때는 outer join 을 아래 처럼 해보세요,, 없는게 어떤건지 나옵니다,,,,
select a.*
from dbo.tTest1 as a
left outer join
dbo.tTest2 as b
on b.cId = a.cId
where b.cId is null
-
임쑤
2014.10.23 21:58
알려주신 쿼리 유용하게 잘 썼습니다.
제가 하던 중에 실수가 있어서 오류가 난 것 같아요.
테이블B를 수정해서 inner join을 하니 제대로 붙습니다. 감사합니다.
정류장Id 가 문자라면 공백문제가 있을 수 있겠네요,, a테이블에 있는 정류장Id가 b테이블에 반드시 있다면 inner join으로 하시는게 좋을것 같습니다,,