我有以下SQL代码,可以很好地将数据行从旧表传输到新表。 (在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 :(得分:0)
您需要在新表上创建trigger。在该触发器中,您可以执行多个语句来有条件地更新旧表。
答案 1 :(得分: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)
;