示例我在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#)
);
在我的數據庫中。 DEPARTMENT ='SPORTS'= D#= 5,DEPARTMENT ='GAMES'= D#= 3; 合併部門= '體育' INTO DEPARTMENT = '遊戲',和經理仍然會保持不變,則employee.D#= 5將變更爲employee.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#;
但我的邏輯似乎是錯的。 任何解決方案?
1)您的部門表中沒有total_staff_number列; 2)你爲什麼要減少源和目標總數,你應該增加源,減少目標; 3)更改total_staff_number列後,更新您的source.d#。如果你這樣做,你就失去了價值「3」。上兩次更新操作期間,兩列的值均爲「5」。 – yalpertem
@yigitalp 我已用total_staff_number進行編輯。我改變我的數據庫中的表。 嗯。不確定哪一個應該減少/增加。問題是,當運動員工合併到該部門時,遊戲員工將增加。那麼我該怎麼做呢? – user3553846