如何从两个表中删除
How can I delete from two tables
我有两个 table 的员工和薪水,我准备查询的方式是一旦从员工 table 中删除员工,员工薪水就会自动从薪水中删除table.
一旦从员工 table 中删除了员工记录,如何从工资 table 中删除员工记录?
这是我的 SQL 代码:
$db->query('
DELETE employees
, salary
FROM employees
JOIN salary
WHERE employees.id = salary.staffId
AND salary.staffId = :id'
);
您必须离开连接并更改 where 子句
$db->query('
DELETE employees
, salary
FROM employees
LEFT JOIN salary ON employees.id = salary.staffId
WHERE employees.id = :id'
);
CREATE TABLE employees(id INT)
INSERT INTO employees VALUES(1),(2),(3),(4)
CREATE TABLE salary (id INT,staffId INT)
INSERT INTO salary VALUES(1,1),(2,2),(3,3)
DELETE employees
, salary
FROM employees LEFT JOIN salary ON employees.id = salary.staffId
WHERE employees.id = 4
SELECT * FROM employees
| id |
| -: |
| 1 |
| 2 |
| 3 |
db<>fiddle here
已经解释了如何使用 left join
.
从一两个 table 中 delete
我回答是因为我认为您错过了使用数据库引擎内置功能的机会。这是您对上下文的描述:
I have prepared my query in such a way that once staff is deleted from the employees table, the staff salary is automatically deleted in the salary table.
您描述的是雇员和薪水之间的父子关系:我建议只在 table salary
中创建一个 外键约束 ,即参考文献 table employee
。您可以在键上设置选项on delete cascade
,这样当父记录被删除时,所有对应的子记录也会自动删除(如果没有子记录,子table不受影响)。
您可以将外键约束添加到现有 table 中,如下所示:
alter table salary
add constraint fk_staff_id
foreign key (staff_id)
references employee(id)
on delete cascade;
然后,要删除员工,您只需...
delete from employee where id = :id;
... 请放心,salary
中的任何关联记录都会自动删除。
我有两个 table 的员工和薪水,我准备查询的方式是一旦从员工 table 中删除员工,员工薪水就会自动从薪水中删除table.
一旦从员工 table 中删除了员工记录,如何从工资 table 中删除员工记录?
这是我的 SQL 代码:
$db->query('
DELETE employees
, salary
FROM employees
JOIN salary
WHERE employees.id = salary.staffId
AND salary.staffId = :id'
);
您必须离开连接并更改 where 子句
$db->query('
DELETE employees
, salary
FROM employees
LEFT JOIN salary ON employees.id = salary.staffId
WHERE employees.id = :id'
);
CREATE TABLE employees(id INT)
INSERT INTO employees VALUES(1),(2),(3),(4)
CREATE TABLE salary (id INT,staffId INT)
INSERT INTO salary VALUES(1,1),(2,2),(3,3)
DELETE employees , salary FROM employees LEFT JOIN salary ON employees.id = salary.staffId WHERE employees.id = 4
SELECT * FROM employees
| id | | -: | | 1 | | 2 | | 3 |
db<>fiddle here
已经解释了如何使用 left join
.
delete
我回答是因为我认为您错过了使用数据库引擎内置功能的机会。这是您对上下文的描述:
I have prepared my query in such a way that once staff is deleted from the employees table, the staff salary is automatically deleted in the salary table.
您描述的是雇员和薪水之间的父子关系:我建议只在 table salary
中创建一个 外键约束 ,即参考文献 table employee
。您可以在键上设置选项on delete cascade
,这样当父记录被删除时,所有对应的子记录也会自动删除(如果没有子记录,子table不受影响)。
您可以将外键约束添加到现有 table 中,如下所示:
alter table salary
add constraint fk_staff_id
foreign key (staff_id)
references employee(id)
on delete cascade;
然后,要删除员工,您只需...
delete from employee where id = :id;
... 请放心,salary
中的任何关联记录都会自动删除。