This is closely related to this question, but adds another requirement.
Given a parent table \'parent\'
╔════════════╦════════╗
║ PARENT_ID ║ NAME
Assuming (PARENT_ID, PROP_ID) is unique:
SELECT r1.PARENT_ID
FROM rel r1
INNER JOIN rel r2 ON r1.PARENT_ID = r2.PARENT_ID AND r2.PROP_ID = 5
INNER JOIN rel r3 ON r1.PARENT_ID = r3.PARENT_ID AND r3.PROP_ID = 1
GROUP BY r1.PARENT_ID
HAVING COUNT(*) = 2
Or,
SELECT parent.PARENT_ID
FROM parent
INNER JOIN
(
SELECT PARENT_ID
FROM rel
WHERE PROP_ID IN (1,5)
GROUP BY PARENT_ID
HAVING COUNT(*) = 2
) good ON parent.PARENT_ID = good.PARENT_ID
LEFT OUTER JOIN rel bad ON parent.PARENT_ID = bad.PARENT_ID
AND bad.PROP_ID NOT IN (1,5)
WHERE bad.PARENT_ID IS NULL
Or even,
SELECT DISTINCT parent.PARENT_ID
FROM parent
INNER JOIN rel r2 ON parent.PARENT_ID = r2.PARENT_ID AND r2.PROP_ID = 5
INNER JOIN rel r3 ON parent.PARENT_ID = r3.PARENT_ID AND r3.PROP_ID = 1
LEFT OUTER JOIN rel r0 ON parent.PARENT_ID = r0.PARENT_ID
AND r0.PROP_ID NOT IN (1,5)
WHERE r0.PARENT_ID IS NULL