因此,我想按雇员的每个受抚养者来将雇员的工资更新10%。因此,在依赖表中有3名雇员被提及,他的工资是100,他的更新工资将是100 * 1.10 * 1.10 * 1.10,即133.1。这是员工表
CREATE TABLE Employee (
ENumber CHAR(5) NOT NULL, /* Employee number */
Salary DECIMAL(7,2), /* Salary */
CONSTRAINT Employee_PK PRIMARY KEY(ENumber)
);
这是从属表
CREATE TABLE Dependent (
ENumber CHAR(5) NOT NULL, /* Employee number */
DName VARCHAR(30) NOT NULL, /* Dependent name */
CONSTRAINT Dependent_PK PRIMARY KEY(ENumber, DName),
CONSTRAINT Dependent_FK FOREIGN KEY(ENumber) REFERENCES Employee(ENumber)
);
我能够更新他们的工资,但只能更新一次,只有10%,而且无论他们有多少个受抚养人,都可以更新。这就是我到目前为止
update employee set salary=salary*1.10 where enumber in (select enumber from dependent);
答案 0 :(得分:2)
赞:
UPDATE Employee e
SET Salary = Salary * POWER(1.1, (SELECT COUNT(*) FROM Dependent WHERE ENumber = e.ENumber));
此:
SELECT COUNT(*) FROM Dependent WHERE ENumber = e.ENumber
返回一个数字,说p
个雇员的受抚养者,
因此您需要将1.1
提高到p
的幂,然后乘以salary
。
答案 1 :(得分:0)
您正在做的是获取原始薪水表中的行,并在行中有依赖项时对其进行更新,而不是基于受抚养者的数量。
UPDATE e SET e.salary=e.salary*POWER(1.10,d.DCount)
FROM employee e
JOIN (SELECT ENumber, COUNT(1) AS DCount FROM dependent GROUP BY ENumber) d
ON e.enumber = d.enumber