SELECT *,COUNT(*) FROM ( SELECT DISTINCT cd.cid as id, cmp.`name` FROM cities c JOIN districts d ON (d.cid = c.id) JOIN city_delivery cd on (cd.district = d.id) JOIN companies cmp ON (cmp.id = cd.cid) WHERE c.id IN (9) ) cm JOIN comp_tags t ON (t.cid = cm.id) WHERE t.tid IN (17,18,19) GROUP BY t.cid HAVING COUNT(t.tid) = 3