mysql - 左连接导致重复行

标签 mysql

我有一个查询可以成功地从我的产品表中获取独特的产品并显示它们。我正在尝试将图标表添加到组合中,其中某些产品可以有多个图标。问题是我试图只使用连接,例如当一个产品有 2 个图标时,我将为该 1 个产品选择 2 行。

这是我的 sql:

    SELECT p.products_image, 
           pd.products_name, 
           p.products_id, 
           p.products_model, 
           p.manufacturers_id, 
           p.products_price, 
           p2i.icons_id, 
           p.products_tax_class_id, 
           IF(s.status, s.specials_new_products_price, NULL)             AS 
           specials_new_products_price, 
           IF(s.status, s.specials_new_products_price, p.products_price) AS 
           final_price 
    FROM   products p 
           LEFT JOIN manufacturers m 
                  ON p.manufacturers_id = m.manufacturers_id 
           LEFT JOIN specials s 
                  ON p.products_id = s.products_id 
           LEFT JOIN products_to_categories p2c 
                  ON p.products_id = p2c.products_id 
           LEFT JOIN products_description pd 
                  ON p.products_id = pd.products_id 
           LEFT JOIN products_to_icon p2i 
                  ON p.products_id = p2i.products_id 
    WHERE  p.products_status = '1' 
           AND pd.language_id = '1' 
           AND p2c.categories_id = '36'

最佳答案

在末尾添加一个 GROUP BY 子句。 如果你仍然想要所有的图标 id,你可以结合 group_concat

例如:

SELECT p.products_image, 
       pd.products_name, 
       p.products_id, 
       group_concat(p2i.icons_id separator ",") as icons_ids
       (...)
WHERE  p.products_status = '1' 
       AND pd.language_id = '1' 
       AND p2c.categories_id = '36'
GROUP BY p.products_id

关于mysql - 左连接导致重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351966/

相关文章:

python - 无法插入字符串或只读缓冲区,不长

php - 使用 PHP 将数据库数据编码为 JSON

PHPStorm 表单处理 : PHP variable not echoing, 也不发布到 sql

php - JOIN 3 个表中的行 WHERE table.column1 = tableS.column1 = tableT.column1

php - 获取 MYSQL 结果为 key=>value 格式,尽管 key 不是字段名

mysql - 我应该在我的查询中执行方程式,还是在本地执行它们并更新数据库

mysql - SQLite 中拉丁语和英语名称的条件排序

mysql - SQL 内连接给出错误

mysql - 如何在没有与外键和主键相同字段的两个表之间创建关系

Mysql 在 WHERE 子句中返回具有零 (0) 列数据的行