PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Many-to-Many-SQL-Abfrage zum Auswählen aller Bilder, die mit bestimmten Wörtern gekennzeichnet sind

Hier ist die funktionierende Abfrage, die ich geschrieben habe:

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)

Diese Abfrage zeigt zuerst die Bilder, die mit allen drei Tags übereinstimmen, dann die Bilder, die mit mindestens 2 der 3 Tags übereinstimmen, und schließlich mindestens 1 Tag.