MySQL 查询联结表返回重复行
Posted
技术标签:
【中文标题】MySQL 查询联结表返回重复行【英文标题】:MySQL querying a junction table returns duplicate rows 【发布时间】:2017-08-17 09:16:56 【问题描述】:我有以下表结构:
所以一个产品可能有多个product_type
。
当我在 mysql 中加入时,每个 product_type
都会重复出现 product
记录。因此,例如,如果我有一个名为 Actifoam
的产品,并且它在 products_types
表中有 2 条记录,那么查询的结果将包括两次 Actifoam
(每个都有不同的 product_type
。
这是我的查询:
SELECT DISTINCT product.*, product_type.name as product_type_name
FROM products_types
JOIN product_type ON product_type.id = products_types.product_type_id
JOIN product ON product.id = products_types.product_id
查询结果如下:
[
0 => [
'id' => 'recccAQHxsb4OEsX6'
'name' => 'Actifoam'
'product_type_name' => 'Silver Dressing'
]
1 => [
'id' => 'recccAQHxsb4OEsX6'
'name' => 'Actifoam'
'product_type_name' => 'Foam'
]
]
我不希望 product
记录像这样出现多次,如果有多个 product_types
,我希望所有内容都出现在一行上。
有人知道我如何实现这一目标吗?
【问题讨论】:
【参考方案1】:DISTINCT
仅当 SELECT
语句中的所有列的 2 行具有完全相同的对应值时才会返回唯一行。在您的情况下,您需要 GROUP BY
和 GROUP_CONCAT
。
GROUP_CONCAT
将返回product_type_name
,以逗号分隔。
SELECT product.*, GROUP_CONCAT(product_type.name) as product_type_name
FROM products_types
JOIN product_type ON product_type.id = products_types.product_type_id
JOIN product ON product.id = products_types.product_id
GROUP BY product.id
【讨论】:
以上是关于MySQL 查询联结表返回重复行的主要内容,如果未能解决你的问题,请参考以下文章