【发布时间】:2014-04-20 12:24:54
【问题描述】:
例如,我在 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' INTO DEPARTMENT='GAMES' ,经理仍然保持不变,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”。
-
@yigitalp 我已经用 total_staff_number 进行了编辑。我改变了我数据库中的表。唔。不确定哪个 1 应该减少/增加。问题是当 Sport 员工并入该部门时,Games 员工会增加。那我该怎么做呢?