在select查询中使用多个连接时重复

时间:2017-04-05 16:22:36

标签: postgresql select join left-join

我目前正在尝试查询psql数据库。查询中涉及三个表,其结构如下所示

产品表

   Productid    Name    Quantity    DateCreated

样本表

    Sampleid    Name    DateReceived    Productid   Descriptionid

描述表

   Descriptionid    Description 

所以当我使用下面的查询时

  Select p.Name,p.Quantity,s.DateReceived,d.Description
     from public.Product p
     left join Sample s on s.Productid = p.Productid
     left join Description d on s.Descriptionid = d.Descriptionid

这将返回数据,但其中包含许多重复数据。

 Project Name   Quantity    DateReceived    Description
 13CD             1.00      7/12/2013 0:00    ABCD
 13CD             1.00      7/12/2013 0:00    ABCD
 13CD             1.00      7/12/2013 0:00    ABCD
 13CD             1.00      7/12/2013 0:00    ABCD
 13FML            4.00      8/7/2013 0:00     EFGH
 13FML            4.00      8/7/2013 0:00     EFGH
 13CD             4.00      7/12/2013 0:00    IJKL
 13CD             4.00      7/12/2013 0:00    IJKL

我是新手加入,不确定是否需要更改联接

3 个答案:

答案 0 :(得分:1)

您可以使用

GROUP BY d.Descriptionid

或实际订单的其他一些唯一标识符,而不是产品,您应该收到您正在寻找的内容

答案 1 :(得分:0)

看起来您正在获取所有交易,因此存在多行,因为类似的交易

的影响做些什么
Select p.Name,sum(p.Quantity) as Quantity,s.DateReceived,d.Description
     from public.Product p
     left join Sample s on s.Productid = p.Productid
     left join Description d on s.Descriptionid = d.Descriptionid
group by
 p.Name,s.DateReceived,d.Description

应显示您要查找的内容,数量将是交易次数

或者如果您只是寻找行中的信息而且计数不是必需的,只需要做

select distinct ...

应该为你做的伎俩

答案 2 :(得分:0)

ProductSample个表具有名为Name的重复属性,需要重命名一个(您的意思是ProductName而不是ProjectName?)。您的预期结果(无空值)表明您实际上不需要外连接:

SELECT DISTINCT ProjectName, Quantity, DateReceived, Description
  FROM Sample
       NATURAL JOIN
       Description
       NATURAL JOIN
       ( SELECT Name AS ProjectName, Productid, Quantity
           FROM Product ) t;