Postgres выбрать строки, имеющие определенные значения в другой таблице

products

id title
1 Iphone X
2 Samsung
3 Xiaomi
4 Huawei

products_description

product_id description
1 64gb
1 White
1 New
2 128gb
2 Black
3 64gb
3 Black
4 64gb
4 Black

Необходимо выбрать все телефоны, имеющие характеристику "64gb" и "Black" одновременно (результат: Xiaomi, Huawei)

Пример неправильно работающего запроса:
SELECT * FROM products LEFT JOIN products_description ON products.id=products_description.product_id WHERE products_info.description='64gb' AND products_info.description='Black'
(понимаю, что одной той же строки не может быть два разных значения)


Ответы (1 шт):

Автор решения: Danil Apsadikov

Поменяй LEFT на INNER JOIN

SELECT *
FROM products
    INNER JOIN products_info ON products.id = products_info.id
WHERE products_info.description = 'Black' AND products.id IN (SELECT id FROM products INNER JOIN products_info ON products.id = products_info.id WHERE products_info.description = '64gb')
→ Ссылка