항상 자주 애용(?)하고 있는 초짜생이 입니다 :)
그동안 자주는 왔는데 간만에 도장하나 찍구가여~
오랜만에 디비할라니 너무 어렵네요 ㅜㅜ
어디다 물어볼곳도 없고..
부동산 정보를 표현하려는 쿼린데요
아래는 디비를 그렸는데 한번 봐주세요~
-------------------------------------------------------------------
[건물상세정보] 건물정보id, 면적, 꼭대기층, 방향, 아파트동,호수라인
[건물정보] 건물정보id, 건물명
[매물정보] 매물정보id, 건물정보id, 주소,아파트동, 아파트호수
[매물상세정보] 매물정보id, 건물가격, 집주인전화번호
-------------------------------------------------------------------
현재 건물정보와, 건물상세정보에는 그 건물에 대한 정보가 들어있구요
디비가 저렇게 4개가 있을때 주어지는 값은 [건물정보id] 하나에요.
웹에서 건물정보id값을 넘겨줘서
결과물은 이런식으로 만들려고 하는데 쿼리문을 어떻게 써야하는지 잘 모르겠습니다 ㅜ
:: 선택하신 [건물명]에 등록되어있는 매물정보는 총 [3]건입니다.
<건물명> ::
[1] 건물가격,집주인전화번호,면적,꼭대기층,방향,
[2] 건물가격,집주인전화번호,면적,꼭대기층,방향,
[3] 건물가격,집주인전화번호,면적,꼭대기층,방향,
이런식의 결과를 만들려고 하는데 여기서 중요한 점은 면적,꼭대기층,방향은 건물정보가 없는 경우도 있기때문에
정보가 없을경우 left outer join의 결과처럼 나와야 하는데 제가 아무리해도 inner join의 결과처럼
건물정보가 없는 매물정보가 보여지 않습니다. ㅜㅜ 도와주세요 몽충님~
아래는 제가 해본 쿼리랑 원하는 결과물이에요;
==========================================================================================
select a.건물정보id,a.우편번호id, b.동,b.호수, c.탑층,c.공급면적,*
from 건물정보 as a
inner join 매물주소 as b on a.건물정보id=b.건물정보id and a.우편번호id=b.우편번호id
left outer join 건물상세정보 as c on c.건물정보id=a.건물정보id and c.동 = b.동 and c.호수라인 = right(b.호,1)
where
c.건물정보id='2009102323285966'
==================현재 결과물(원래 매물정보에 있는 4건이 나와야함 ㅜ)======================================
2009102323285966 420020 동 호수 꼭대기층 15층 32평
2009102323285966 420020 동 호수 꼭대기층 2층 24평
===============================원하는 결과물========================================================
2009102323285966 420020 동 호수 꼭대기층 15층 32평
2009102323285966 420020 동 호수 꼭대기층 2층 24평
2009102323285966 420020 동 호수 꼭대기층 null null
2009102323285966 420020 동 호수 꼭대기층 null null
님이 만드신 쿼리에서 한곳만 수정하면 됩니다.
select a.건물정보id,a.우편번호id, b.동,b.호수, c.탑층,c.공급면적,*
from 건물정보 as a
inner join 매물주소 as b on a.건물정보id=b.건물정보id and a.우편번호id=b.우편번호id
left outer join 건물상세정보 as c on c.건물정보id=a.건물정보id and c.동 = b.동 and c.호수라인 = right(b.호,1)
where
c.건물정보id='2009102323285966'a.건물정보id='2009102323285966'
위 쿼리 보시면...where 조건절에 c.건물정보id가 아니라 a.건물정보id로 검색을 해야합니다.
건물상세정보를 left join 으로 조인했는데 이 테이블을 조건절에서 사용하게 되면
결국엔 inner join 한것이나 마찬가지가 됩니다.
왜냐면 원인은 아주 간단합니다. 가장 기초중 하나인데..아마 아실듯 싶습니다.
c.건물정보id='xxxxxx' 이렇게 하게되면 c.건물정보id에 있는 null 값들은 검색대상에서 제외가 되버립니다.
null 은 값이 비어있는것이 아닌 값이 없는 것이기 때문에 그런겁니다.
(그렇기 때문에 null 값 찾을때도 c.건물정보id='' 가 아니라 c.건물정보id is null 로 찾잖아요.)