테이블 조인 중복값 제외 데이터

테이블 조인 중복값 제외 데이터

QA

테이블 조인 중복값 제외 데이터

답변 2

본문

안녕하세요 아래와 같이 테이블 3개가 존재하고있습니다.

각 회원 별로 로그인시 request, usegoods 테이블의 id 를 조건 잡아서

goods테이블에 중복되지 않은 데이터를 추출하려고 합니다.

nike 로그인시 goodsNum 테이블의 104 , 105, 106 데이터가 나와야하고

adidas 로그인시 100, 105, 106 데이터가 나와야 하는데 

 

SELECT b.* FROM goods_request a RIGHT OUTER JOIN 
goods_admin b ON a.goodsNo = b.goodsNo WHERE a.goodsNo IS NULL 
AND b.goodsNo NOT IN (SELECT goodsNo FROM goods WHERE goodsId = '".$member['mb_id']."')

작업 쿼리입니다.ㅡㅜ

 105, 106 데이터만 나와버립니다..

 

goodsNo 가 같은 데이터는 뽑을수 있겠는데

userId 별로 중복되지 않는데이터를 뽑기가..;;

고수님들 도움부탁드립니다.

 

goods_admin

goodsNo
100
101
102
103
104
105
106

 

goods_request

goodsNo userId
103 nike
103 adidas
104 adidas

 

goods

goodsNo userId
100 nike
101 nike
102 nike
101 adidas
102 adidas

 

 

 

이 질문에 댓글 쓰기 :

답변 2

userId  부분을 변경하시면 됩니다 

 

SELECT b.goodsNo FROM

( select goodsNo from goods_request where userId='adidas'

union

select goodsNo from goods where userId='adidas' ) as a

right join goods_admin as b on(a.goodsNo=b.goodsNo)

where a.goodsNo is NULL

먼저 SELECT goodsNo FROM goods WHERE goodsId = '".$member['mb_id']." 이 부분에서 나오는 값이 1개 이상이라면 위 쿼리문에서 오류가 날 수 밖에 없습니다.

AND b.goodsNo NOT IN ( ... ) 여기에 값이 1,2,3 이런씩으로 들어가야 하는데 결과가 그렇게 나오질 않거든요.

따라서 서브쿼리 자체가 위 쿼리와 같이 join이 되어야 합니다.

즉 테이블 3개를 조인해서 돌려보세요.

 

예) 이것과 비슷하게 상황에 맞게 바꾸시면 되지 싶네요.(테이블 관계가 어떻게 되는지 몰라 대충 만든 쿼리입니다.)


SELECT b.*
FROM goods_request AS a
RIGHT OUTER JOIN goods_admin AS b ON a.goodsNo=b.goodsNo
JOIN goods AS c ON b.goodsNo=c.goodsNo
WHERE a.goodsNo IS NULL 
AND c.goodsId='".$member['mb_id']."'
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
  • 질문이 없습니다.
전체 10,635
© SIRSOFT
현재 페이지 제일 처음으로