2012-11-11 64 views
0

我有以下SQL代碼,可以將舊錶中的數據行傳輸到新表中。 (在MySQL工作臺中工作)如何使用填充舊錶中的行的動態數據動態更新新MySQL表中的行?

INSERT INTO us_compensation.RPBAR 
(ORG_SEC_ID , 
FYE, 
TOTAL_SALARY_PAID , 
OTHER_COMP_PAID , 
TOTAL_BONUS_PAID , 
PERFORMANCE_EQUITY_TIME_VESTING_OPTIONS_TIME_VESTING_STOCK, 
TOTAL) 
SELECT DISTINCT 
    ORG_SEC_ID, 
    FYE, 
    TOTAL_SALARY_PAID, 
    OTHER_COMP_PAID, 
    TOTAL_BONUS_PAID, 
    PERFORMANCE_EQUITY + TIME_VESTING_OPTIONS + TIME_VESTING_STOCK, 
    TOTAL_SALARY_PAID + OTHER_COMP_PAID + TOTAL_BONUS_PAID 
     + PERFORMANCE_EQUITY + TIME_VESTING_OPTIONS + TIME_VESTING_STOCK 
FROM 
    equilar.realizablepay 
group by ORG_SEC_ID 
HAVING MAX(FYE); 

我需要幫助的是以下內容。舊錶中的行會隨新數據自動更改而自動更改。但新表(RPBAR)中的行不反映新數據。會發生什麼情況是新表的所有行都包含來自舊錶的舊數據,並在新表的底部附加了舊錶中的新數據。

我希望新表不要將行中的舊數據存儲在行中,而是使用舊錶中的新數據(使用新數據更新所有相關行)更新相關行。

如何讓新表反映舊錶的新行中的新數據,而不是舊錶和舊數據?

回答

0

您需要在新表格上創建一個trigger。在該觸發器中,您可以執行多個語句來有條件地更新舊錶。

+0

我正在與eggyall建議創建視圖的建議。我不熟悉觸發器(新手與SQL),但現在閱讀。 – user1542006

0

也許你只是想要一個VIEW

CREATE VIEW us_compensation.RPBAR AS 
    SELECT DISTINCT 
      ORG_SEC_ID, 
      FYE, 
      TOTAL_SALARY_PAID, 
      OTHER_COMP_PAID, 
      TOTAL_BONUS_PAID, 
      PERFORMANCE_EQUITY + TIME_VESTING_OPTIONS + TIME_VESTING_STOCK 
      AS PERFORMANCE_EQUITY_TIME_VESTING_OPTIONS_TIME_VESTING_STOCK, 
      TOTAL_SALARY_PAID + OTHER_COMP_PAID + TOTAL_BONUS_PAID 
      + PERFORMANCE_EQUITY + TIME_VESTING_OPTIONS + TIME_VESTING_STOCK 
      AS TOTAL 
    FROM  equilar.realizablepay 
    GROUP BY ORG_SEC_ID 
    HAVING MAX(FYE) 
; 
+0

謝謝。但是,由於表RPBAR已經存在(作爲第二個表),我怎麼包含視圖語句而不嘗試創建RPBAR? – user1542006

+0

@ user1542006:先放下表格。 – eggyal

+0

好的。我所做的是將RPBAR重命名爲RPBAR1,並且執行成功,但影響了0行。我有大約4000行。此外,沒有顯示結果視圖。 – user1542006