问题:
使用简单的 JOIN 从 MySQL 中的多个表中选择数据而不指定任何数据时条件下,由于每个匹配键连接了多行,因此可能会导致重复行。我们如何消除这些重复项并检索每种饮料的唯一行,包括所有关联的照片?
解决方案:
要解决此问题,我们需要利用分组和聚合函数来合并重复的行并从中选择所需的值。
首先,我们按 Drinks_id 对行进行分组,以便每行仅获取一行Drink:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
此方法将为每种饮料返回一行,仅包含一张照片。要包含所有关联的照片,我们可以使用 GROUP_CONCAT 函数将照片文件名连接成单个字符串:
SELECT name, price, GROUP_CONCAT(photo, ',') FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
此查询将生成一个表,其中包含唯一的饮料行和包含所有饮料的连接字符串。每种饮料的照片文件名。
请注意,GROUP_CONCAT 是 MySQL 特定的函数,其他数据库系统可能不支持。在这种情况下,可能需要考虑替代方法,例如子查询或数组数据类型。
以上是MySQL连接多个表时如何避免重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!