[英]Fill data of one row using other table column sum in mysql
I have 3 tables我有 3 张桌子
employee:员工:
+----+--------+----------+--------+-----------------+-----+
| id | E_name | super_id | salary | bdate | Dno |
+----+--------+----------+--------+-----------------+-----+
| 1 | John | 3 | 100000 | Fri Jan 01 1960 | 1 |
| 2 | Mary | 3 | 100000 | Tue Dec 01 1964 | 3 |
| 3 | Bob | null | 100000 | Thu Feb 07 1974 | 3 |
| 4 | Tom | 1 | 100000 | Tue Jan 17 1978 | 2 |
| 5 | Bill | null | 100000 | Thu Jan 17 1985 | 1 |
+----+--------+----------+--------+-----------------+-----+
department :部门:
+-----+--------------+
| Dno | dname |
+-----+--------------+
| 1 | Payroll |
| 2 | Tech support |
| 3 | Research |
+-----+--------------+
deptsal:部门:
+-----+-------------+
| dno | totalsalary |
+-----+-------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
+-----+-------------+
the deptsal table contains the sum of department-wise salaries with dno . deptsal表包含dno的部门工资总和。 as foreign key referencing department table..
作为外键引用部门表..
I have to write two procedures in MySQL我必须在MySQL中写两个程序
I tried this我试过这个
DELIMITER $$
CREATE PROCEDURE `updateSalary` (IN dno INT)
BEGIN
UPDATE deptsal
SET totalsalary = (
SELECT SUM(employee.salary)
FROM employee
WHERE employee.dno = @dno
GROUP BY employee.dno
)
where deptsal.dno = dno;
END$$
DELIMITER ;
but this doesn't seem to work但这似乎不起作用
here is my create table queries这是我的创建表查询
CREATE TABLE department (
Dno INT(6) PRIMARY KEY,
dname VARCHAR(25)
);
CREATE TABLE employee (
id INT(6) PRIMARY KEY,
E_name VARCHAR(25),
super_id INT(6),
salary INT(10),
bdate DATE,
Dno INT(6)
);
ALTER TABLE employee
ADD FOREIGN KEY (Dno) REFERENCES department(Dno);
CREATE TABLE deptsal (
dno INT(6) PRIMARY KEY,
totalsalary INT(10)
);
ALTER TABLE deptsal
ADD FOREIGN KEY (Dno) REFERENCES department(Dno);
@dno and dno are two seprate thnings @dno 和 dno 是两个独立的东西
DELIMITER $$
CREATE PROCEDURE `updateSalary` (IN dno INT)
BEGIN
UPDATE deptsal
SET totalsalary = (
SELECT SUM(employee.salary)
FROM employee
WHERE employee.dno = dno
GROUP BY employee.dno
)
where deptsal.dno = dno;
END$$
DELIMITER ;
END$$
DELIMITER ;
To update all you can modify your procedure, to update all when dno = -1要更新所有你可以修改你的程序,当 dno = -1 时更新所有
Or write a second procedure或者写第二个程序
DELIMITER $$
CREATE PROCEDURE `updateSalaryAll` ()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE _dno INTEGER DEFAULT -1;
-- declare cursor for department number
DEClARE curdno
CURSOR FOR
SELECT dno FROM deptsal;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN curdno;
getdno: LOOP
FETCH curdno INTO _dno;
IF finished = 1 THEN
LEAVE getdno;
END IF;
UPDATE deptsal
SET totalsalary = (
SELECT SUM(employee.salary)
FROM employee
WHERE employee.dno = _dno
GROUP BY employee.dno
)
where deptsal.dno = _dno;
END LOOP getdno;
CLOSE curdno;
END$$
DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.