是什么导致重复行出现在SQL中?

时间:2014-05-22 17:40:57

标签: sql postgresql duplicates

我正在运行(非常长)的查询,并且有大量重复的行。什么条款会导致这种情况,以及会解决什么问题?

我已经尝试在select子句中的一列上添加Distinct

    Select Distinct location
        ,item_no
        ,order_no
    from (select *
          from stockA a
          join r_except re using (item_no)
          where re.location = 'locationA'

          UNION

          select * 
          from stockB b
          join r_except re using (item_no) 
          where re.location = 'locationB'
          ) ss

    left join r_except re 
    on ss.item_no = re.item_no

    left join (select ih.invoice_no
                    ,iih.item_no
                    ,sum(shipped * case) tot_shipped
               from invoice_hist ih inner join invoice_item_hist iih
                           on ih.invoice_no = iih.invoice_no
               where ih.invoice_date between (date 'now' - interval '12 months') and date 'now'
                       group by ih.invoice_no, iih.item_no) as ihsum
               on (ss.item_no = ihsum.item_no)


   join (select us.uitem
                  ,sum(ss.on_hand) uoh
                  ,sum(ss.vendor_order) vendor_order
                  ,max(case when ss.last_sale_date = '12/31/9999' then null else ss.last_sale_date end) last_sale_date                        
                  ,max(re.level) r_level
         from () ss inner join universal_no us
         on (ss.uitem = uoh.uitem)

left join (select ss.uitem
                    ,max(po.order_no) order_no
                    ,max(po.order_date) order_date
         from () ss inner join poitem poi
                                on ss.item_no = poi.item_no
                    inner join po
                          on po.order_no = poi.order_no
                    where poi.release_qty != poi.case_qty * poi.order_qty
                    group by ss.uitem
         ) po
         on ss.uitem = po.uitem

这是删节的,其中一些可能不在select子句中,但那是因为它太长了。

1 个答案:

答案 0 :(得分:3)

您可以看到的两件事是:

您是否加入了一对多关系的表格?这通常会导致多次返回相同的行。如果有多个子行连接到父级。

另一个更明显的原因可能是您的数据库中确实存在重复数据。