首页 >数据库 >mysql教程 >在 MySQL 中对多个表使用 SELECT DISTINCT 时如何处理重复行?

在 MySQL 中对多个表使用 SELECT DISTINCT 时如何处理重复行?

DDD
DDD原创
2024-12-08 19:17:10430浏览

How to Handle Duplicate Rows When Using SELECT DISTINCT with Multiple Tables in MySQL?

在 MySQL 中对多个表进行 SELECT DISTINCT

在 MySQL 查询中,您在 Drinks 和 Drinks_photos 表之间使用隐式联接,而无需WHERE 子句中的任何条件。这会产生笛卡尔积,产生 5 行,其中包含重复的名称和价格值。要消除这些重复项,您可以使用 SELECT DISTINCT 子句。

但是,如果您想保留每种饮料的所有照片,则不能简单地使用 SELECT DISTINCT,因为它只返回不同的行。相反,您需要使用分组和聚合函数的组合。

分组和聚合函数

分组根据指定的列聚合行。在本例中,您希望按 Drinks_id 对结果进行分组,以获得每种饮料一行。然后,您可以使用聚合函数为每个分组结果选择所需的值。

例如,要检索每种饮料的第一张照片,您可以使用:

SELECT name, price, MIN(photo) AS photo
FROM drinks
JOIN drinks_photos ON drinks.id = drinks_id
GROUP BY drinks_id;

MIN () 聚合函数返回每个照片列的最小值

GROUP_CONCAT

或者,如果您想将每种饮料的所有照片连接到一个字符串中,您可以使用 GROUP_CONCAT() 函数:

SELECT name, price, GROUP_CONCAT(photo, ',') AS photos
FROM drinks
JOIN drinks_photos ON drinks.id = drinks_id
GROUP BY drinks_id;

但是请注意,GROUP_CONCAT() 不是标准 SQL 聚合不同数据库的函数及其使用可能有所不同。

以上是在 MySQL 中对多个表使用 SELECT DISTINCT 时如何处理重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn