【问题标题】:1 to many relationship in SQLSQL中的1对多关系
【发布时间】:2021-05-05 04:08:04
【问题描述】:

我有以下两张表:

部门(ID,描述)

员工(ID、姓名、部门ID)

我在这些表之间的关系是:一个员工是一个部门的成员,一个部门有很多员工。

为了确保每个员工都分配了一个部门,我只是将“DepartmentId”列设置为非空。

但是我怎么能确定,没有没有分配员工的部门呢?因为“一对多”的意思是:每个部门至少有一个员工。

感谢和问候

MB

【问题讨论】:

  • 关系是1:n,根据其定义,1 个部门可能有很多员工或根本没有员工。如果一个部门应该始终至少有 1 名员工,那么如何在表 Departments 中插入一行,因为那时该部门中没有任何员工?
  • 嘿,好吧。谢谢你的解释

标签: sql sqlite relationship one-to-many


【解决方案1】:

你可以在这里使用存在逻辑:

SELECT Id, Description
FROM Departments d
WHERE NOT EXISTS (SELECT 1 FROM Employees e WHERE e.DepartmentId = d.Id);

【讨论】:

  • 感谢您的快速解答。我更多地问我,有没有办法防止这种情况发生。因为“一对多”的定义是,必须至少有一个。如果我查看了上述模型,我在这里实现了这个关系:1 到 0..n
  • 为什么要防止空部门?
  • 因为“1 to 1..n”的定义是,每个部门至少需要一名员工。但就我而言,我可以有没有任何员工的部门。有没有办法通过数据库处理这个案例?或者我必须通过应用程序执行此操作?谢谢 MB
【解决方案2】:

您可以使用下面的查询来查找所有未注册员工的部门:

SELECT * from departments WHERE departments.id not in(SELECT employees.dep_id from employees GROUP by employees.dep_id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2019-08-25
    • 1970-01-01
    相关资源
    最近更新 更多