I have a following table structure.
USERS
PROPERTY_VALUE
PROPERTY_NAME
USER_
you are using AND operator between two pn.id=1 and pn.id=2. then how you getting the answer is between that:
(SELECT id FROM property_value WHERE value like '101') and
(SELECT id FROM property_value WHERE value like '102')
So like above comments , Use or operator.
Update 1:
SELECT * FROM users u
INNER JOIN user_property_map upm ON u.id = upm.user_id
INNER JOIN property_value pv ON upm.property_value_id = pv.id
INNER JOIN property_name pn ON pv.property_name_id = pn.id
WHERE pn.id in (1,2) AND pv.id IN (SELECT id FROM property_value WHERE value like '101' or value like '102');