테이블 조인 중복값 제외 데이터
본문
안녕하세요 아래와 같이 테이블 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']."'