diff --git a/src/tags.rs b/src/tags.rs index fd20a84..2c8ab3c 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -374,9 +374,14 @@ impl TagDao for SqliteTagDao { ) -> anyhow::Result> { use diesel::dsl::*; + let exclude_subquery = tagged_photo::table + .filter(tagged_photo::tag_id.eq_any(exclude_tag_ids.clone())) + .select(tagged_photo::photo_name) + .into_boxed(); + tagged_photo::table .filter(tagged_photo::tag_id.eq_any(tag_ids.clone())) - .filter(tagged_photo::tag_id.ne_all(exclude_tag_ids)) + .filter(tagged_photo::photo_name.ne_all(exclude_subquery)) .group_by(tagged_photo::photo_name) .select((tagged_photo::photo_name, count(tagged_photo::tag_id))) // .having(count_distinct(tagged_photo::tag_id).eq(tag_ids.len() as i64))