Вы можете сделать это с помощью EXISTS:
SELECT i.name
FROM item i
WHERE
EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'a')
AND
EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'b')
или объединить таблицы, сгруппировать их по элементам и установить условие в предложении has:
SELECT i.name
FROM item i INNER JOIN part p
ON i.id = p.id
WHERE p.name_part IN ('a', 'b')
GROUP BY i.name
HAVING COUNT(DISTINCT p.name_part) = 2
Хотя я использовал столбец имена из ваших примеров данных, я считаю, что столбец id
в таблице part
должен быть переименован в нечто вроде item_id
, поскольку он ссылается на id
из item
.