我有两张表employees
和departments
。
部门:
create table dept (
id INT NOT NULL AUTO_INCREMENT,
dept_name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
员工:
create table department_master (
id INT NOT NULL AUTO_INCREMENT,
dept_id INT NOT NULL,
emp_name VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
如果将部门分配给员工表中的某个员工,我希望阻止部门从UI中删除。左连接给我重复的值。
如何查看在employees表中是否使用了部门。
答案 0 :(得分:2)
如果要阻止删除部门,只需在dept_id列的表department_master
中添加外部约束。
create table department_master (
id INT NOT NULL AUTO_INCREMENT,
dept_id INT NOT NULL,
emp_name VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
constraint con_dm foreign key dept_id references dept( id )
);
它的默认行为是ON DELETE RESTRICT
,这意味着如果给定dept_id的department_master中至少存在一行,则无法从dept表中删除它。
如果您想获取没有任何员工记录的部门,您可以使用NOT EXISTS
:
select *
from dept d
where not exists (
select 1
from department_master m
where d.id = m.dept_id
);
答案 1 :(得分:0)
我相信你想要按部门分组的员工数量,如下:
SELECT count(*) as employees, d.dept_name FROM dept AS d LEFT JOIN department_master AS e ON e.dept_id = d.id group by e.dept_id