如何检查表 1 中的值是不是用于表 2?
Posted
技术标签:
【中文标题】如何检查表 1 中的值是不是用于表 2?【英文标题】:How to check if values from the table 1 are used in table 2?如何检查表 1 中的值是否用于表 2? 【发布时间】:2017-07-25 11:35:12 【问题描述】:我有两张桌子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 中删除部门。左连接给了我重复的值。
如何查看员工表中是否正在使用部门。
【问题讨论】:
您要求选择 .... where ?? @scaisEdge 我尝试加入,但没有得到想要的结果。所以我想知道是否有更好的方法来做到这一点? Laravel checking if record exists的可能重复 如果您只需要一个简单的检查,您可以使用 select where .. 如果这很清楚 .. 好的,否则请告诉我 【参考方案1】:如果你想防止一个部门被删除,你可以简单地在表department_master
的dept_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),
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
);
【讨论】:
@Krish 请注意存储引擎应该是 InnoDB 才能工作 @RaymondNijland 谢谢【参考方案2】:我相信您想要计算按部门分组的员工数量,如下所示:
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
【讨论】:
以上是关于如何检查表 1 中的值是不是用于表 2?的主要内容,如果未能解决你的问题,请参考以下文章
在插入之前检查 DataGridview 中的值是不是与数据库表/模式兼容