質問

私は2つの関連テーブルを持っています。 テーブルの1つは写真のすべてのエントリを含み、もう1つは各写真とユーザー情報のすべてのCATエントリを持っています。

photos table:
id
photo (unique filename)
user


cats tables

photo
user
cat
.

写真

1    photo1.jpg    40000
2    photo2.jpg    40000
3    photo3.jpg    40000
4    photo4.jpg    40001
5    photo5.jpg    40001
.

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」の猫に含まれていたとしても、「P」猫に含まれていないユーザー40000のすべての写真を選択することです。

Pats CATに含まれているため、検索結果には表示されません。 ユーザー40000のための私のクエリは次の結果を与えるべきです:

photo1
photo3
.

役に立ちましたか?

解決

はシンプルな左結合/ NULLテスト

にする必要があります。
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
.

基本的に、左の結合は依然としてすべての写真を修飾することができます。ただし、具体的にはCATERISE TABLEに同じ写真とカテゴリ= 'P'によって具体的に存在する場合、それは "C.Photo"の値を持ちます。そのため、WHERE句で、CATテーブルに(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