테스트 사이트 - 개발 중인 베타 버전입니다

테이블 조인 중복값 제외 데이터 채택완료

왕까마중 6년 전 조회 3,860

안녕하세요 아래와 같이 테이블 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개

채택된 답변
+20 포인트
o
6년 전

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

6년 전

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

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

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

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

 

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

</p>

<p>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']."'</p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인