2015-03-19 21 views
0

我有兩張需要與之建立多對多關係的表格。我們將稱之爲庫存的一個表格通過表單填充。其他表銷售額是通過每週將CSV導入數據庫來填充的。在postgresql中創建多對多的文件

Example tables image

我想一步通過銷售表,每個銷售排在庫存表具有相同SKU的行相關聯。這是踢球。我只需要關聯每個庫存行的數量字段中指定的銷售行數。

例子:Example image of linked tables

現在我知道我可以通過創建一個Perl腳本,通過銷售表的步驟,並創建使用基於數量字段一個循環ItemIDUniqueKey場環節上做到這一點。我想知道的是,是否有一種方法可以單獨使用SQL命令來執行此操作?我讀過很多關於許多人的內容,我還沒有發現任何人這樣做。

回答

0

假設表:

create table a(
    item_id integer, 
    quantity integer, 
    supplier_id text, 
    sku text 
); 

create table b(
    sku text, 
    sale_number integer, 
    item_id integer 
); 

下面的查詢似乎做你想要什麼:

update b b_updated set item_id = (
    select item_id 
    from (select *, sum(quantity) over (partition by sku order by item_id) as sum from a) a 
    where 
     a.sku=b_updated.sku and 
     (a.sum)> 
      (select count(1) from b b_counted 
      where 
       b_counted.sale_number<b_updated.sale_number and 
       b_counted.sku=b_updated.sku 
      ) 
    order by a.sum asc limit 1 
    ); 
+0

謝謝您的幫助。實際上,我寫了一個非常詳細的perl腳本來完成此任務。我一直參與其他項目,還沒有能夠回到它。因爲它的立場Perl的腳本是非常笨重的,每次我需要改變一些事情,我回到它,忘記了一半的內部工作。我將在這裏通過你的解決方案並試圖實現它,因爲這似乎是一個更直接的方法。我會檢查更新。謝謝 – joshw 2015-05-23 00:54:29

+0

所以我終於有時間回到這裏,意識到我忽略了一個重要的觀點。表b中的行有另一列,即銷售數量。坦率地說,你的回答肯定會對我提出的最初問題有用。然而,隨着項目的進展,我意識到我沒有想到所有的要求。所以我認爲我終究被糟糕的Perl腳本卡住了。 – joshw 2015-06-09 17:40:13