我远不是数据库专家,所以请随时告诉我,我做错了。我正在尝试创建一组具有以下基本规则的表:
有公司,经理和员工。经理只能属于一家公司,但员工可以属于一个以上的经理。我提出的表结构是这样的:
# Companies
company_id
company_name
# Managers
manager_id
company_id
# Employees
employee_id
company_id
employee_name
# Managed By
employee_id
manager_id
这种结构看起来合理吗?我认为我需要像“管理者”之类的东西,因为员工可以有多个经理。
我现在感到难以置信的是如何设法抓住我想要的记录。例如:
编辑:我认为我已经弄清楚了这些问题,但这仍然感觉不合适,所以对表格结构的任何帮助都会受到赞赏。
我在为这些信息编写查询时遇到问题,这让我觉得我已经对表结构做了一些根本性的错误。希望有人能帮到我吗?
答案 0 :(得分:2)
通常,该方案是正确的。然而,确实存在的一种可能性是,您可以获得数据,其中员工由两家以上公司的经理管理。
您的疑问:
select distinct Employees.employee_name as name from Employees, Managers, ManagedBy where Managers.manager_id = X and ManagedBy.manager_id = Managers.manager_id and Employees.employee_id = ManagedBy.employee_id;
和
select distinct Employees.employee_name as name from Employees, Managers, ManagedBy where (Managers.manager_id = X or Managers.manager_id = Y) and ManagedBy.manager_id = Managers.manager_id and Employees.employee_id = ManagedBy.employee_id;
其中X和Y是您想要的经理ID。
编辑:我知道你划掉了你想要的查询,但第三个是:
select distinct Employees.employee_name as name from Employees where Employees.company_id = Z;
其中Z是您想要的公司ID。
答案 1 :(得分:1)
所有员工都在同一家公司
SELECT employee_id, employee_name, company_name
FROM Employees
LEFT JOIN Companies ON Employees.company_id = Companies.company_id
WHERE Companies.company_id = ????
or if you pulling by name
WHERE Companies.company_name = 'ABC'
获取属于某个经理的所有员工姓名
SELECT employee_id, employee_name, manager_id
FROM Employees
LEFT JOIN Managed_By ON Employees.employee_id = Managed_By.employee_id
WHERE Managed_By.manager_id = ????
拥有的Managers表中的manager_name很不错