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')