I\'ve created a simple example (hopefully much more fun than my actual data) to better express my question:
CREATE TABLE SUPER_HERO
( ID INT,
NAME VAR
This is divided in two parts, the filter, and the rest of the query so it is easy to extend
DECLARE @DELIMITER CHAR = ','
DECLARE @CSV_STRING VARCHAR(20) = '1,3'
SELECT @TOTREQ = COUNT(DISTINCT ITEMS) FROM dbo.Split(@CSV_STRING, @DELIMITER)
SELECT
SUPER_HERO_NAME = SUPER_HERO.NAME
FROM
SUPER_HERO INNER JOIN
(SELECT SUPER_HERO_SKILL.SUPER_HERO_ID
FROM SUPER_HERO_SKILL
LEFT JOIN dbo.Split(@CSV_STRING, @DELIMITER) SPLIT ON SUPER_HERO_SKILL.SKILL_ID = SPLIT.ITEMS
GROUP BY SUPER_HERO_SKILL.SUPER_HERO_ID
HAVING COUNT(SPLIT.ITEMS) = @TOTREQ -- This ensure no mising super-powers
AND COUNT(*) = @TOTREQ -- This ensure no extra super-powers (can be omited of course)
) AS FILTER ON SUPER_HERO.ID = FILTER.SUPER_HERO_ID