Pergunta

Eu tenho duas tabelas relacionadas.Uma das tabelas contém cada entrada para as fotos e o outro tem tudo o gato entradas para cada foto e informações do usuário.

photos table:
id
photo (unique filename)
user


cats tables

photo
user
cat

fotos

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

gatos

photo1.jpg    40000    A
photo2.jpg    40000    A
photo1.jpg    40000    B
photo1.jpg    40000    C
photo2.jpg    40000    P
photo3.jpg    40000    A

Cada foto pode ser atribuído a mais categorias para cada usuário

O que eu quero é selecionar todas as fotos para o usuário 40000 que não foram incluídos no 'P' gato mesmo se eles podem ter sido incluídos em 'A' ou 'B' gato.

Porque photo2.jpg está incluído no P gato não deve aparecer nos resultados de busca.Minha consulta para o usuário 40000 deve dar os seguintes resultados:

photo1
photo3
Foi útil?

Solução

Deve ser um simples guarda-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

Basicamente, o left join permite ainda que todas as fotos para ser qualificado.No entanto, se a juntar-se, especificamente, NÃO existe na tabela de categorias pela mesma foto E categoria = 'P', então ele vai ter um valor para o "c.foto".Assim, a cláusula where, eu adicionei para incluir somente aqueles que NÃO via (null) existem no gato tabela.

Outras dicas

mysql> select * from photos 
       where photo not in (select photo from cats where cat='P') 
       and user = '40000';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top