[英]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.