Самый эффективный способ сделать это с самостоятельным соединением:
SELECT * FROM attributes a1
JOIN attributes a2 USING (item_name) -- e.g. frog
WHERE a1.value = 'green' AND a2.value = '4 legs';
Еще одним решением, которое используют некоторые люди, является трюк с GROUP BY:
SELECT item_name FROM attributes
WHERE value IN ('4 legs', 'green')
GROUP BY item_name
HAVING COUNT(*) = 2;
Но решение GROUP BY может быть не таким эффективным, как JOIN, в зависимости от того, какую марку СУБД вы используете. Также один метод может масштабироваться лучше по мере увеличения объема в вашей таблице.