Script
select *
, case when numero > 0 then 'background-color:red; color:white; font-weight:bold' end as _MENSAGEM__STYLE
from (
select count(1) as numero
, 'Similaridades de marcas/referencias de produtos cadastrados' as mensagem
from similaridades_produto sp
join produtos p on p.marca_id = sp.marca_id and p.referencia_fabricante = sp.referencia
where sp.produto_similar_id is null
union
select count(1) as numero
, 'Similares sem o reverso' as mensagem
from similaridades_produto s1
left join similaridades_produto s2 on s2.produto_id = s1.produto_similar_id and s2.produto_similar_id = s1.produto_id
where s2.id is null
and s1.produto_similar_id is not null
union
select count(distinct p1.id) as numero
, 'Pares de produtos com o mesmo grupo similar mas que não tem relacionamento entre si' as mensagem
from produtos p1
join produtos p2 on p2.grupo_similar_id = p1.grupo_similar_id and p1.id <> p2.id
left join similaridades_produto s on s.produto_id = p1.id and s.produto_similar_id = p2.id
where s.id is null
union
select count(1) as numero
, 'Grupos similares conflitantes' as mensagem
from similaridades_produto s
join produtos p1 on p1.id = s.produto_id
join produtos p2 on p2.id = s.produto_similar_id
where p1.grupo_similar_id <> p2.grupo_similar_id
union
select count(distinct p.grupo_similar_id) as numero
, 'Grupos similares que não tem nenhum relacionamento' as mensagem
from produtos p
where not exists (
select 1
from similaridades_produto s
join produtos p1 on p1.id = s.produto_id
and p1.grupo_similar_id = p.grupo_similar_id
)
) q
order by mensagem