执行连接多个表中数据的 SELECT 语句时,可能会遇到重复的行,如下所示在提供的场景中:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id
此查询检索饮料的 5 行,其中照片是唯一唯一的 场地。然而,名称和价格重复,导致像“fanta”这样的饮料出现重复行。
要消除这些重复,您需要利用分组和聚合功能。分组允许您根据共同值组合行,而聚合函数使您能够为每个组提取特定值。
如果您希望每种饮料单独一行,无论与之关联的照片有多少,您都可以按 Drinks_id 进行分组:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
此查询将return:
name | price | photo |
---|---|---|
fanta | 5 | ./images/fanta-1.jpg |
dew | 4 | ./images/dew-1.jpg |
如果您希望每种饮料都有一组照片,MySQL 提供了 GROUP_CONCAT 函数,该函数可以连接同一组中的值:
SELECT name, price, GROUP_CONCAT(photo, ',') FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
此查询将yield:
name | price | photo |
---|---|---|
fanta | 5 | ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg |
dew | 4 | ./images/dew-1.jpg,./images/dew-2.jpg |
请注意,应谨慎使用 GROUP_CONCAT,因为如果连接的值包含逗号,它可能会导致数据库性能问题或返回过大的字符串。
以上是在 SQL SELECT 语句中连接多个表时如何避免重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!