如何检查表 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 【问题描述】:

我有两张桌子employeesdepartments

部门:

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 中的值是不是与数据库表/模式兼容

用于替换表中的值的宏

Sqlite检查一行中的值是不是在没有循环的下一行中的值之间

SQL函数检查日期是不是在另一个表的2个日期之间

如何根据Oracle中的值查找表名[重复]

如何连接 Excel 数据透视表中的值,而不是求和或计数