Selecionar a partir de onde o NÃO - salvo
-
23-12-2019 - |
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
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';