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`
我可以建议你永远不要使用自然连接吗