如何从两个表中删除

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 中的任何关联记录都会自动删除。