sql 쿼리 질문이요
테이블 A 에는
code name
001 매장1
002 매장2
003 매장3
004 매장4
005 매장5
006 매장6
007 매장7
008 매장8
009 매장9
010 매장10
테이블 B
user code
user1 001
user1 003
user1 006
user1 007
A와 B테이블 2개의가 있는데
출력값을 아래 그림처럼 출력 하고 싶어요;
A와 B를 비교해서 A를 모두 출력하는 상태에서 B에 같은 코드가 있으면 chk값을 1로 나머진 0으로
어떻게 처리 해야하나요;
where 조건이 당연히 b.user = 'user1'이 되는겁니다
a.code a.name , chk
001 매장1 1
002 매장2 0
003 매장3 1
004 매장4 0
005 매장5 0
006 매장6 1
007 매장7 1
008 매장8 0
009 매장9 0
010 매장10 0
Comment 6
-
건우아빠
2013.11.11 09:47
-
레리
2013.11.11 10:21
select a.name, a.code ,(case when b.code is null then 0 else 1 end ) as chkfrom table_A aleft outer join talbe_B b on b.user='user1'where b.user='user1'출력값이 이상합니다.chk의 출력값이 전부 다 1이 나오네요;어디가 잘못 된걸까요; -
건우아빠
2013.11.11 10:58
where b.user='user1' --> 아웃조인후 b.user='user1' 인값만 나오게 하셨기 때문에 당연 1만 나오게 되겠죠...
일단 where b.user='user1' 럾애고 조회해 보세요..
-
레리
2013.11.11 11:29
그렇게 조회 하면 결과값이 같은 값이 반복적으로 나와요 ;;
매장1 001 1
매장1 001 1
매장1 001 1
매장1 001 1
매장1 001 1
매장2 002 1
매장2 002 1
매장2 002 1
매장2 002 1
매장2 002 1
이런식으루요;;
-
건우아빠
2013.11.11 12:40
on a.code = b.code 를 빼셨네요...
두테이블간 조인하는 부분이 없으면 조합으로 처리가 되어 버립니다.
cross join 형태로 조합된 자료가 나옵니다....
-
폭주
2013.11.11 11:38
테이블 B 에 user,code 컬럼이 유니크한 컬럼이라면select a.name, a.code ,(case when b.code is null then 0 else 1 end ) as chkfrom table_A aleft outer join talbe_B bon a.code=b.codewhere b.user='user1'유니크한 컬럼이 아니라면select a.name, a.code ,(case when b.code is null then 0 else 1 end ) as chkfrom table_A aleft outer join (select user,code from talbe_B where user='user1' group by user,code) AS bon a.code=b.code
아웃조인후
case when 테이블 B의 code is null then 0 else 1 end