PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Consulta SQL de muitos para muitos para selecionar todas as imagens marcadas com determinadas palavras


Aqui está a consulta de trabalho que escrevi:
SELECT i.id, i.relative_url, count(*) as number_of_tags_matched
FROM   images i
    join tags_image_relations ti on i.id = ti.image_id
    join tags t on t.id = ti.tag_id
    where t.name in ('google','microsoft','apple')
    group by i.id having count(i.id) <= 3
    order by count(i.id)

Essa consulta mostrará primeiro as imagens correspondentes a todas as três tags, depois as imagens correspondentes a pelo menos 2 das 3 tags e, finalmente, pelo menos 1 tag.