在Sql数据库中使用左联接复制结果

在Sql数据库中使用左联接复制结果,sql,Sql,目前,我面临一些有关prestashop的sql查询的问题,不知道如何删除重复的结果 以下是查询: SELECT DISTINCT ps_product.id_product , ps_product_lang.name , ps_category_lang.link_rewrite as categoryName , ps_product_lang.description_short , ps_product_lang.link_

目前,我面临一些有关prestashop的sql查询的问题,不知道如何删除重复的结果

以下是查询:

SELECT DISTINCT ps_product.id_product
        , ps_product_lang.name
        , ps_category_lang.link_rewrite as categoryName
        , ps_product_lang.description_short
        , ps_product_lang.link_rewrite
        , ps_product.condition
        , available_now
        , ps_product.price
        , ps_product_lang.id_lang 
FROM ps_product 
LEFT JOIN ps_product_lang ON ps_product.id_product = ps_product_lang.id_product
LEFT JOIN ps_category_lang ON ps_product.id_category_default = ps_category_lang.id_category
WHERE ps_product_lang.id_lang = 1;
问题是我得到了重复的行,而我只需要一行 基于语言的每个Id,这是我得到的结果:


您正在为一个类别选择所有类别名称,无论使用何种语言。所以你得到了“T恤衫”加上“T恤衫”和“衬衫”再加上“衬衫”。在查询中添加
和ps_category_lang.id_lang=1
,以便仅获取该语言的类别名称

您还在这里使用外部联接,以便获得缺少语言条目的产品。但是在外部连接的记录中,
ps\u product\u lang.id\u lang
将为空。WHERE子句
WHERE ps_product_lang.id_lang=1
将失败并丢弃每个外部连接记录,您将获得与简单内部连接相同的结果。在on子句中具有外部联接表的条件

SELECT 
    p.id_product
  , p.name
  , cl.link_rewrite as categoryName
  , pl.description_short
  , pl.link_rewrite
  , p.condition
  , p.available_now
  , p.price
  , pl.id_lang 
FROM ps_product p
LEFT JOIN ps_product_lang pl ON p.id_product = pl.id_product and pl.id_lang = 1
LEFT JOIN ps_category_lang cl ON p.id_category_default = cl.id_category and cl.id_lang = 1;

向我们展示一些数据、当前结果和预期结果。请阅读,这里是一个很好的地方,可以放置模式、实际结果和预期结果,以便我们更好地理解您的查询。这是因为一个或两个连接的表可能有多行用于同一产品。尝试使用
where
子句缩小查询范围,这可能是您希望产品使用的语言。如果尝试
SELECT*
,您可能会看到其他列之间的一些差异。然后,您可以决定如何减少选择。如果类别表中存在id_lang,则应尝试在where中使用它:where ps_product_lang.id_lang=1和ps_category_lang.id_lang=1;