我有两张相关的表格。 其中一个表格包含照片的每个条目,另一个表格包含每张照片和用户信息的所有猫条目。
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
每张照片都可以分配给每个用户的更多类别
我想要的是为用户40000选择未包含在' P'猫,即使它们可能被包含在A'或' B'猫。
因为P cat中包含的photo2.jpg不应出现在搜索结果中。 我对用户40000的查询应该给出以下结果:
photo1
photo3
答案 0 :(得分:0)
应该是一个简单的left-join / 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
基本上,左连接仍然允许所有照片都合格。但是,如果连接特别是在相同的照片和类别='P'的类别表中存在,那么它将具有“c.photo”的值。所以在where子句中,我添加了只包含那些在cat表中不存在(通过null)的内容。
答案 1 :(得分:0)
mysql> select * from photos
where photo not in (select photo from cats where cat='P')
and user = '40000';