Как вывести данные, у которых есть оба значения MYSQL

https://onecompiler.com/mysql/3ys8cevr9

CREATE TABLE `attributes` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `product_id` INT(11) NULL DEFAULT NULL,
        `attribute_id` INT(11) NULL DEFAULT NULL,
        `value` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
        PRIMARY KEY (`id`) USING BTREE,
        INDEX `product_id` (`product_id`) USING BTREE,
        INDEX `attribute_id` (`attribute_id`) USING BTREE,
        INDEX `value` (`value`) USING BTREE
    );


INSERT INTO `attributes` (`id`, `product_id`, `attribute_id`, `value`) VALUES (1, 1, 2, 'DDR4');
INSERT INTO `attributes` (`id`, `product_id`, `attribute_id`, `value`) VALUES (2, 2, 2, 'DDR5');
INSERT INTO `attributes` (`id`, `product_id`, `attribute_id`, `value`) VALUES (3, 4, 3, 'CPU');
INSERT INTO `attributes` (`id`, `product_id`, `attribute_id`, `value`) VALUES (4, 5, 3, 'CPU');
INSERT INTO `attributes` (`id`, `product_id`, `attribute_id`, `value`) VALUES (5, 5, 2, 'DDR5');
INSERT INTO `attributes` (`id`, `product_id`, `attribute_id`, `value`) VALUES (6, 5, 3, 'CPU');


SELECT * FROM attributes WHERE (attribute_id = 2 AND (value IN ('DDR5'))) AND (attribute_id = 3 AND (value IN ('CPU')))

В результате необходимо вывести данные где product_id = 5


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

Автор решения: Павел

Можно использовать представление VIEW:

CREATE VIEW v AS (
SELECT * FROM attributes 
WHERE (attribute_id = 2 AND (value IN ('DDR5'))) 
OR (attribute_id = 3 AND (value IN ('CPU'))));

SELECT * from v 
WHERE product_id = 5;

введите сюда описание изображения

→ Ссылка
Автор решения: Akina
SELECT product_id 
FROM attributes 
WHERE (attribute_id, value) IN ((2, 'DDR5'),(3,'CPU'))
GROUP BY 1
HAVING COUNT(DISTINCT attribute_id) = 2;

https://dbfiddle.uk/CJ7dfqlO

→ Ссылка