在 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中文网其他相关文章!