2012-04-26 83 views
2

我之前問過幾乎相同的問題,但由於序列發生器,我無法使用MERGE語法。問題是我們有數據庫中人員的價格規則。我想爲這些應該有相同規則的人同步這些價格規則。根據同一表中的主記錄插入缺失的記錄

+---------------------------+ 
| id | name | belongs_to_id | 
|----+------+---------------+ 
| 1 | A |    | 
| 2 | B | 1    | 
| 3 | C | 1    | 
| 4 | D |    | 
+----+------+---------------+ 

確定,所以現在的人B和C的需求,最終有相同的價格規則,用戶A.所以我有一個pricerule表(簡體)是這樣的:

+-----------------------------------+ 
| id | user_id | product_id | price | 
+----+---------+------------+-------+ 
| 1 | 1  | 1   | 0.12 | 
| 2 | 1  | 2   | 0.10 | 
| 3 | 1  | 3   | 0.03 | 
| 4 | 2  | 2   | 0.10 | 
| 5 | 2  | 3   | 0.10 | 
| 6 | 3  | 1   | 0.12 | 
| 7 | 3  | 2   | 0.10 | 
| 8 | 3  | 3   | 0.03 | 
| 9 | 3  | 4   | 0.25 | 
+----+---------+------------+-------+ 

所以在這種例如,什麼應該發生的是:

  • 給用戶2他的價格的產品1價格0.10
  • 更新的價格爲用戶2產品3,至0.03
  • 刪除價格規則用戶3,產品4

我想我必須採取三個步驟:刪除,更新,補充。我得到了前兩個。但是我正在圍繞插入語句進行思考。基本上我需要爲用戶1選擇所有的價格規則,然後爲每個用戶左邊加入product_id 。我如何爲每個用戶做到這一點?

我使用的是Oracle 10.1

回答

2
INSERT INTO 
    priceRule 
SELECT 
    user.id, 
    parentPriceRule.product_id, 
    parentPriceRule.price 
FROM 
    user 
LEFT JOIN 
    priceRule AS parentPriceRule 
    ON parentPriceRule.user_id = user.belongs_to_id 
LEFT JOIN 
    priceRule AS myPriceRule 
    ON myPriceRule.user_id  = user.id 
    AND myPriceRule.product_id = parentPriceRule.product_id 
WHERE 
    myPriceRule.id IS NULL 
+0

專門爲USER_ID 1插入,我補充說:「和user.belogds_to_id = 1」的底部..正確的記錄似乎表明了。 – rolandow 2012-04-26 13:12:02