mysql - 搜索一个属性时选择所有属性

标签 mysql

我有以下表格:

表:属性

+---------------+-------------+
| 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/

相关文章:

javascript - 实时时间表编辑和保存

mysql - 如何从创建虚拟列的表中获取不同的值 'types' - MySQL

mysql - 在一个 mysql 查询中执行多个选择的更好方法?

mysql - 在 mysql 中,有没有简单的方法可以知道错误/警告号的含义,而不是谷歌搜索

MySql LIKE '%keyword%' 开始和结束通配符 - 解决使用索引的问题

php - 将 wordpress powered 站点中的所有标题转换为 "Capitalized"大小写

mysql - 从所有表的 MySQL 数据库中删除所有零日期

php - 使用 PHP 将 mySQL 转换为 XLS?

Mysql SUM 的 SUM

mysql - 我的查询何时返回 null? (N最高薪资问题)