MySQL-在多个表上分组

MySQL-在多个表上分组,mysql,Mysql,我有如下表和查询: 我想选择所有产品并显示给定产品所属的所有特征和过滤器(特征和过滤器在单独的表中) 它几乎在工作,结果是正确的,但成倍增加。如果我在一个表上使用一个组,那么我的解决方案工作得非常好,当我添加另一个表时,结果会相乘 代替: +------------+--------------+---------------+-----------------+ | product_id | product_name | traits | filters

我有如下表和查询:

我想选择所有产品并显示给定产品所属的所有特征和过滤器(特征和过滤器在单独的表中) 它几乎在工作,结果是正确的,但成倍增加。如果我在一个表上使用一个组,那么我的解决方案工作得非常好,当我添加另一个表时,结果会相乘

代替:

    +------------+--------------+---------------+-----------------+
    | product_id | product_name | traits        | filters         |
    +------------+--------------+---------------+-----------------+
    | 1          | product1     | trait1,trait2 | filter5         |
    | 2          | product2     | trait2,trait3 | filter4,filter2 |
    | 3          | product3     | trait3,trait5 | filter3         |
    | 4          | product4     | trait5,trait1 | filter2         |
    | 5          | product5     | trait1        | filter1         |
    +------------+--------------+---------------+-----------------+
我得到:

    +------------+--------------+--------------------------------+------------------------------------+
    | product_id | product_name | traits                         | filters                            |
    +------------+--------------+--------------------------------+------------------------------------+
    | 1          | product1     | trait1,trait2                  | filter5,filter5                    |
    | 2          | product2     | trait2, trait2, trait3, trait3 | filter2, filter4, filter2, filter4 |
    | 3          | product3     | trait3,trait5                  | filter3,filter3                    |
    | 4          | product4     | trait5,trait1                  | filter2,filter2                    |
    | 5          | product5     | trait1                         | filter1                            |
    +------------+--------------+--------------------------------+------------------------------------+
谢谢

试试这个:

SELECT P.*, 
       GROUP_CONCAT( DISTINCT `trait_name` ORDER BY product_id SEPARATOR ',') AS traits,
       GROUP_CONCAT( DISTINCT `filter_name` ORDER BY product_id SEPARATOR ',') AS filters
FROM `products` P 
NATURAL JOIN 
       `personality_traits` 
NATURAL JOIN 
       `product_to_traits` 
NATURAL JOIN 
       `filters` 
NATURAL JOIN 
       `product_to_filters` 
GROUP BY `product_name`
试试这个:

SELECT P.*, 
       GROUP_CONCAT( DISTINCT `trait_name` ORDER BY product_id SEPARATOR ',') AS traits,
       GROUP_CONCAT( DISTINCT `filter_name` ORDER BY product_id SEPARATOR ',') AS filters
FROM `products` P 
NATURAL JOIN 
       `personality_traits` 
NATURAL JOIN 
       `product_to_traits` 
NATURAL JOIN 
       `filters` 
NATURAL JOIN 
       `product_to_filters` 
GROUP BY `product_name`

我可以建议你永远不要使用自然连接吗