2016-02-24 62 views
0

唯一约束这里slo_order_item_id是唯一的约束错误:重复键值违反Postgres的

INSERT INTO shb.sale_order 
       ( 
          slo_order_item_id, 
          slo_order_id, 
          slo_channel, 
          slo_status, 
          slo_channel_status, 
          slo_order_date, 
          slo_dispatch_by_date, 
          slo_sku, 
          slo_quantity, 

          slo_selling_price, 
          slo_shipping_charge, 

          slo_vendor_id 
      ) 
    SELECT Distinct vss_order_item_id, 
     vss_order_id, 
     vss_channel_name, 
     vss_sale_order_item_status, 
     vss_sale_order_item_status, 
     case when is_date(vss_order_date) then vss_order_date::date else null end, 
     case when is_date(vss_dispatch_date) then vss_dispatch_date::date else null end, 
     vss_sku, 
     1, 

     vss_selling_price, 
     vss_shipping_charge, 

     vss_vendor_id 
    FROM imp.vendor_sale_staging udt 
    WHERE not exists (select 1 from shb.sale_order where slo_order_item_id = udt.vss_order_item_id); 

,我也尝试

WHERE vss_order_item_id not in (select slo_order_item_id from shb.sale_order); 

但这些都被赋予错误。

ERROR: duplicate key value violates unique constraint "unique_sale_order_slo_order_item_id" DETAIL: Key (slo_order_item_id)=(1027559930) already exists.

这是为什么给错误? 哪一个where condition工作快,为什么?

回答

2

您可能必须在临时表中重复值。你可以通过做检查:

select vss_order_item_id, count(*) 
from imp.vendor_sale_staging 
group by vss_order_item_id 
having count(*) > 1; 

如果是这样的话,那么我会建议修复临时表。但是,加载一些东西的快速入门是使用distinct on而不是distinct

SELECT Distinct on (vss_order_item_id) . . . 
FROM imp.vendor_sale_staging udt 
WHERE not exists (select 1 from shb.sale_order where slo_order_item_id = udt.vss_order_item_id) 
ORDER BY vss_order_item_id; 
+0

感谢它的工作。当我尝试的条件两者之间也有什么区别。 –

相关问题