SELECT `t1`.`id`
FROM (SELECT DISTINCT `id` FROM `table` WHERE `cat` = 1) AS `t1`
JOIN (SELECT DISTINCT `id` FROM `table` WHERE `cat` = 2) AS `t2` ON `t2`.`id` = `t1`.`id`
JOIN (SELECT DISTINCT `id` FROM `table` WHERE `cat` = 10) AS `t3` ON `t3`.`id` = `t1`.`id`
SELECT `id`
FROM `table`
WHERE `cat` IN (1, 2, 10)
GROUP BY `id`
HAVING COUNT(`id`) >= 3