unt以外の場所から選択してください
-
23-12-2019 - |
質問
私は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';
. 所属していません StackOverflow