我有两个相关表。 其中一个表包含照片的每个条目,另一个表都包含每个照片和用户信息的所有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
.

每张照片可以为每个用户分配给更多类别

我想要的是选择用户40000的所有照片,即使它们可能已被包含在'a',或'b'cat中,也可以在'p'猫中包含。

因为photo2.jpg包含在p 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
.

基本上,左侧连接仍然允许所有照片都有资格。但是,如果在类别表中专门存在连接,则由同一照片和类别='P'存在,则它将具有“C.Photo”的值。所以在Where子句中,我添加了仅包含猫表中存在的那些(通过空)。

其他提示

mysql> select * from photos 
       where photo not in (select photo from cats where cat='P') 
       and user = '40000';
.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top