Left Join返回更多记录

时间:2010-12-15 14:24:28

标签: sql

我有2个表格及相关数据。 一张桌子用于产品。和其他价格。在价格表中,一个产品可能会出现几次。 如何返回显示不包含重复行的产品的结果

我的查询

select             p.Product, sum(p.Qty), max(pr.netprice)
from               Products  p
  left outer join  Price pr
  on               p.Product=pr.Product
where              p.brand=''
group by           p.Product,pr.Product

但返回更多行,因为右表有多条记录

请帮助

6 个答案:

答案 0 :(得分:2)

我认为不应该有明确的方法,我认为如果正确完成,分组应该会产生你想要的东西。另外,我认为您不需要对两个表中的值进行分组。您应该真正理解您想要的内容。给我们提供示例数据,它将更容易回答您的问题。试试这个:

select p.Product, sum(p.Qty), max(pr.netprice)
from Products p
left outer join Price pr on p.Product = pr.Product
where p.brand = ''
group by p.Product -- only group on param.

答案 1 :(得分:1)

使用distinct关键字。这将删除重复。虽然,如果给定产品的价格不同,如果您删除Max(),每个产品的每个唯一价格将有一条记录。

select DISTINCT p.Product, sum(p.Qty),max(pr.netprice)
from Products p 
left outer join Price pr on p.Product=pr.Product 
where p.brand='' group by p.Product,pr.Product

答案 2 :(得分:0)

尝试将select放入select中。我不确定它会起作用,但试试吧。

答案 3 :(得分:0)

如果您想要总和,请使用上面的Tomas答案。这将为您提供唯一的产品清单,其中包含每种产品的总数量和最高价格

select p.Product, sum(p.Qty), max(pr.netprice) 
from Products p 
left outer join Price pr on p.Product = pr.Product 
where p.brand = '' 
group by p.Product

答案 4 :(得分:0)

如何以这种方式改变它:

SELECT p.Product, sum(p.Qty), 
       (SELECT max(pr.netprice) 
          FROM Price pr 
         WHERE p.Product=pr.Product
       )
  FROM  Products  p
 WHERE  p.brand=''

答案 5 :(得分:-1)

试试这个

SELECT p.Product,p.Qty,MAX(pr.netprice) 来自产品p LEFT OUTER JOIN价格pr ON p.Product = pr.Product 在哪里p.brand ='' GROUP BY p.Product,p.Qty