我有以下表格:
表:属性
+---------------+-------------+
| attribute_id | name |
+---------------+-------------+
| 1 | color |
| 2 | material |
+---------------+-------------+
表:attribute_values
+---------------------+-----------------+--------------+--------------+
| attribute_value_id | attribute_id | product_id | value |
+---------------------+-----------------+--------------+--------------+
| 1 | 1 | 1 | blue |
| 2 | 2 | 1 | metal |
| 3 | 1 | 2 | red |
| 4 | 2 | 2 | metal |
+---------------------+-----------------+--------------+--------------+
我有以下查询:
SELECT
p.product_id AS product_id,
p.name AS product_name,
v.value AS attribute_value,
a.attribute_id AS attribute_id,
a.attribute_category_id AS attribute_category_id,
a.name AS attribute_name,
c.name AS attributes_category_name
FROM
products p
LEFT JOIN
attribute_values v USING (product_id)
LEFT JOIN
attributes a USING (attribute_id)
LEFT JOIN
attribute_categories c USING (attribute_category_id)
WHERE
(a.name = 'color' AND v.value = 'red')
查询的问题是:当产品匹配 WHERE 子句时,我需要所有属性。
所以,我得到的是:我只得到“颜色”属性,但如您所见,特定产品还有“ Material ”属性。
因此,当我搜索红色产品时,我还需要该特定产品的其他属性( Material = 金属)。
最佳答案
这是一个想法 - 归结为它的本质......
SELECT x.*
FROM
( SELECT product_id
, MAX(CASE WHEN attribute_id = 1 THEN value END) color
, MAX(CASE WHEN attribute_id = 2 THEN value END) material
FROM attribute_values
GROUP
BY product_id
) x
WHERE color = 'red';
哦,请注意 attribute_value_id
似乎没有任何作用。
关于mysql - 搜索一个属性时选择所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45147168/