У меня есть две таблицы: таблица идентификаторов продукта:
таблица p_test:
id:
1
2
3
4
и таблица всех возможных комбинаций продукта, проверенного на равенство с любым другим продуктом (пустьНе скажу, что я тестирую их фотографии, и если они равны - я предполагаю, что они одного и того же продукта): таблица p_match_test:
p_id_1, p_id_2, is_same
1 2 0
1 3 0
1 4 1
2 3 1
2 4 0
3 4 0
, как вы можете видеть в этом примере, всего 4 продукта.Продукт 1 был проверен на равенство с продуктом 4, и они были найдены «одинаковыми», то же самое относится и к продуктам 2 и 3. Это означает, что существует только два «уникальных» продукта (2 уникальных изображения для 4 продуктов).
Чего я хочу добиться, так это иметь количество уникальных картинок в любой группе продуктов, поэтому результат будет:
products_count unique_products_count
4 2
Я пробовал этот запрос:
select count(p.id) as products_count,
sum(if(not exists(select * from p_match_test t where (p.id = t.p_id_1 or p.id = t.p_id_2) and t.is_same = 1), 1, 0)) as unique_products_count
from p_test p
, но этоучитывает только продукты, которые имеют нет дубликатов вместо подсчета "уникальных" изображений.Как мне достичь своей цели?