Как вывести данные, у которых есть оба значения 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;
