0

古いテーブルから新しいテーブルにデータの行を転送するために正常に動作する次の 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) の行には新しいデータが反映されません。何が起こるかというと、新しいテーブルには古いテーブルの古いデータを含むすべての行があり、新しいテーブルの下部に古いテーブルに入る新しいデータが追加されます。

新しいテーブルが古いデータを行に格納するのではなく、関係する行を古いテーブルの新しいデータで更新したい (関係するすべての行が新しいデータで更新される)。

新しいテーブルに古いテーブルの行に新しいデータを反映させ、新しいテーブルに古いデータと新しいデータの両方を持たないようにするにはどうすればよいですか?

4

2 に答える 2

0

新しいテーブルにトリガーを作成します。そのトリガーでは、複数のステートメントを実行して、古いテーブルを条件付きで更新できます。

于 2012-11-11T22:22:18.050 に答える
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)
;
于 2012-11-11T22:27:24.390 に答える