0

我有两个相关的表。其中一个表包含照片的每个条目,另一个包含每张照片和用户信息的所有猫条目。

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”猫中。

因为 photo2.jpg 包含在 P cat 中,所以不应该出现在搜索结果中。我对用户 40000 的查询应给出以下结果:

photo1
photo3
4

2 回答 2

0

应该是一个简单的左连接/空测试

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 子句中,我添加了只包含那些不(通过 null)存在于 cat 表中的内容。

于 2014-02-27T18:50:07.000 回答
0
mysql> select * from photos 
       where photo not in (select photo from cats where cat='P') 
       and user = '40000';
于 2014-02-27T19:30:35.450 回答