문제

두 개의 관련 테이블이 있습니다. 테이블 중 하나는 사진에 대한 모든 항목이 들어 있으며 다른 하나는 각 사진 및 사용자 정보에 대한 모든 고양이 항목이 있습니다.

photos table:
id
photo (unique filename)
user


cats tables

photo
user
cat
.

사진 고양이

photo1.jpg    40000    A
photo2.jpg    40000    A
photo1.jpg    40000    B
photo1.jpg    40000    C
photo2.jpg    40000    P
photo3.jpg    40000    A
.

모든 사용자가 모든 사용자에 대해 더 많은 범주에 할당 할 수 있습니다

'a'또는 'b'cat에 포함되었을지라도 'p'고양이에 포함되지 않은 사용자 40000의 모든 사진을 선택하는 것입니다.

POTO2.JPG가 P 고양이에 포함되어 검색 결과에 나타나지 않아야합니다. 사용자 40000에 대한 나의 쿼리는 다음과 같은 결과를 제공해야합니다.

photo1
photo3
.

도움이 되었습니까?

해결책

는 간단한 왼쪽 가입 / 널 테스트 여야합니다

select
      p.id,
      p.photo
   from
      photos p
         left join cats c
            on p.photo = c.photo
            AND c.cat = 'P'
   where
          p.user = 40000
      and c.photo is null
.

기본적으로 왼쪽 가입은 여전히 모든 사진이 자격을 갖추게됩니다.그러나 조인이 동일한 사진 및 카테고리= 'P'로 범주 테이블에 특별히 존재하면 "C.Photo"값이 있습니다.WHERE 절에서는 CAT 테이블에 NULL을 통해 NULL을 통해 NULL을 사용하는 것만 추가로 추가했습니다.

다른 팁

mysql> select * from photos 
       where photo not in (select photo from cats where cat='P') 
       and user = '40000';
.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top