sql에서 비교구문 질문...

sql에서 비교구문 질문...

QA

sql에서 비교구문 질문...

본문


            select a.mb_id, b.mb_name, wr_21, count(*) as cnt , sum(a.wr_31) as tot        
              from {$write_table} a
                       left outer join {$g5['member_table']} b on a.mb_id = b.mb_id
             where wr_29 between '{$stx1}' and '{$stx2}'
             group by a.mb_id, b.mb_name ORDER BY tot DESC

 

wr_29의 날짜안에 wr_31의 값을 더해서 순위를 정하는 소스입니다.

 

여기서 본인의 wr_10의 값과 동일한 값만 뽑고 싶은데 이건 어떻게 해야 하나요?

  left outer join {$g5['member_table']} b on a.wr_10 = b.wr_10

이렇게 하면 될줄 알았는데 아무런 값도 안나오네요...

 

 

이 질문에 댓글 쓰기 :

답변 3

on 

a.mb_id = b.mb_id
and a.wr_10 = b.wr_10

 

이렇게 하면 되지않을가요??

날짜 데이터를 제대로 모르겠고 최근 오라클만 써봐서 헷갈린데

저 쿼리를 db 툴에서 돌려보셨나요? 아마 신택스 에러 떳을거같은데,,

날짜쪽 sum에서 오류날거같은데요? 그누쪽에서 날짜가 어떻게 들어갈진 모르겠으나

보통 2000-xx-xx 00:00 나 2000.00.00 00:00  이런식으로 들어갈텐데 sum 함수 안먹을겁니다

 

 

정규표현식으로 특수문자 제거를 하시던지 리플레이스로 특수문자만 제거해서 해보세요


select a.mb_id, b.mb_name, wr_21, count(*) as cnt , sum(a.wr_31) as tot        
              from {$write_table} a
                       left outer join {$g5['member_table']} b on a.mb_id = b.mb_id
             where wr_29 between '{$stx1}' and '{$stx2}'
             group by a.mb_id, b.mb_name ORDER BY tot DESC

현재 이 소스로 회원들 순위를 매기고 있습니다.
값 또한 정상적으로 나오고 있습니다.

제가 질문을 잘못 한건지... 본인의 wr_10값과 동일한 값만 뽑아내고자 합니다.

질문에 의도를 명확하게 이해하기가 어렵습니다..

select a.mb_id, b.mb_name, wr_21, count(*) as cnt , sum(a.wr_31) as tot       
              from {$write_table} a
                      left outer join {$g5['member_table']} b on a.mb_id = b.mb_id
            where wr_29 between '{$stx1}' and '{$stx2}'
            group by a.mb_id, b.mb_name ORDER BY tot DESC

이게 기존 쿼리에요??

여기서 on 절에
left outer join {$g5['member_table']} b on a.mb_id = b.mb_id and a._wr_10 = b.wr_10 이렇게 넣으면 데이터가 아무것도 없다 이 말씀인지

신택스 에러가 떳는지를 확인을 못하시니..
write_table 테이블에 wr_10 컬럼에는 값은있나요?

맞습니다.
기존쿼리가 댓글에 적어놓은 쿼리입니다.
이상없이 순위와 합계금액이 잘 나오고 있습니다.

여기에서 wr_10값이 같은 것만 뿌려주고 싶어서
and a.wr_10 = b.wr_10 을 넣으니 아무런 값도 나오지 않습니다.

wr_10값은 서울, 부산, 광주 이렇게 다들 잘 들어가 있습니다.

테이블안에 값이있는지 부터 확인을 해보셔야될거같네요
데이터 구성이 어떻게 되있는지 제가 상상해서 그릴수도없는 노릇이라 대충 흉내만 한번 내봤는데
join 에서 일치값이 없어서 그런거라고 밖에 말씀을 못드릴거같네요



select a.mb_id, b.mb_name, wr_21, count(*) as cnt , sum(a.wr_31) as tot        
              from {$write_table} a
                       left outer join {$g5['member_table']} b on a.mb_id = b.mb_id
             where wr_29 between '{$stx1}' and '{$stx2}'
             group by a.mb_id, b.mb_name ORDER BY tot DESC

 

이코드가 현재 정확히 동작한다면 아래 내용을 확인해야합니다

1. 본인의 wr_10값과 동일한 값만 뽑아내고자 합니다  <= 이게 member 테이블의 wr_10 값과 write_table 의 wr_10 값이 동일한 것만 뽑아내려고 한다는 의미인가요 ?

 

그렇다면

 



select a.mb_id, b.mb_name, wr_21, count(*) as cnt , sum(a.wr_31) as tot        
              from {$write_table} a
                       left outer join {$g5['member_table']} b on a.mb_id = b.mb_id and a.wr_10= = b.wr_10
             where a.wr_29 between '{$stx1}' and '{$stx2}' 
             group by a.mb_id, b.mb_name ORDER BY tot DESC

 

 

이렇게 해보세요

답변을 작성하시기 전에 로그인 해주세요.
전체 59,285
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT