簡體   English   中英

合並具有相同主鍵的兩個表

[英]Merge two tables with same primary key

示例我在Employee中具有一些具有以下字段的值。

CREATE TABLE Department (
D#      NUMBER(5)   NOT NULL, /* Department number      */
DName       VARCHAR2(30)    NOT NULL, /* Department name        */
Manager#    CHAR(5)     NOT NULL, /* Department manager number  */
MSDate      DATE,             /* Manager start date         */
    total_staff_number NUMBER(3),
CONSTRAINT Department_PK PRIMARY KEY(D#),
CONSTRAINT Department_CK UNIQUE(DName)
);

CREATE TABLE Employee (
E#      CHAR(5)     NOT NULL, /* Employee number        */
Name        VARCHAR2(30)    NOT NULL, /* Employee name      */
    D#      NUMBER(5),        /* Department number      */
CONSTRAINT Employee_PK PRIMARY KEY(E#),
CONSTRAINT Employee_FK2 FOREIGN KEY (D#) REFERENCES Department (D#)
);

在我的數據庫中。 部門='體育'= D#= 5,部門='游戲'= D#= 3; 將DEPARTMENT ='SPORTS'合並到DEPARTMENT ='GAMES'中,並且經理仍然保持不變,雇員D#= 5將更改為雇員D#= 3

MERGE INTO EMPLOYEE TARGET
USING EMPLOYEE SOURCE WHERE D#=5 ON (
TARGET.D# = SOURCE.D#;
}
WHEN MATCHED THEN
UPDATE SET SOURCE.D#=3;
UPDATE DEPARTMENT.D# SET total_staff_number = total_staff_number - 1 where DEPARTMENT.D# = SOURCE.D#;
UPDATE DEPARTMENT.D# SET total_staff_number = total_staff_number - 1 where DEPARTMENT.D# = TARGET.D#;

但我的邏輯似乎錯了。 有什么辦法嗎?

將員工從“體育”轉移到“游戲”將只是更新departpent列以指向新部門。 問題是之后您將如何懸掛懸掛的部門運動?

對於所有從事體育運動的員工,請更改為游戲。

update employee
   set d# = 3
 where d# = 5;

計算部門游戲中員工的人數,並更新員工計數器。

update department
   set total_staff_number = (
          select count(*)
            from employee
           where d# = 3
       )
 where d# = 3;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM