我正在开发一个项目,该项目使用MariaDB v5.5数据库来跟踪基于树的高层次员工。该树中的每个人都可以拥有与之相关的各种“标志”。在这种情况下,这些标志使用位掩码存储。
我的对象如下所示
Employee Table description +--------------+-------------+--------------------------------------+ | Name | Field | Description | +--------------+-------------+--------------------------------------+ | employee_id | INT | Unique key | | name | VARCHAR(45) | Employees name | | flags | INT(4) | Bitmask of employee attributes | | parent_id | INT | the employee_id of the parent record | +--------------+-------------+--------------------------------------+ 'flag' bitmap description +-----+--------------+ | Bit | Flag | +-----+--------------+ | 0 | CEO | | 1 | MANAGER | | 2 | PROJECT_LEAD | | 3 | SALES_PERSON | | 4 | MAINTANCE | +-----+--------------+ Employee Table Data +----+--------+------------+---------------------------+ | id | name | parent_id | flags | +----+--------+------------+---------------------------+ | 1 | Lisa | NULL | CEO | | 2 | Steve | 1 | MANAGER | | 3 | Pat | 1 | MANAGER | | 4 | Mary | 2 | SALES_PERSON,PROJECT_LEAD | | 5 | Phil | 4 | SALES_PERSON,MAINTANCE | | 6 | Jim | 3 | SALES_PERSON,MAINTANCE | | 7 | Anna | 3 | SALES_PERSON,MAINTANCE | +----+--------+------------+---------------------------+
假设我想查询具有“MAINTANCE”标志的所有员工但是我需要返回具有“MANAGER”标志的父记录的id。所以我的结果应该是这样的。
> SELECT id, name, manager_id, manager_name FROM ... +----+--------+------------+--------------+ | ID | Name | manager_id | manager_name | +----+--------+------------+--------------+ | 5 | Phil | 2 | Steve | | 6 | Jim | 3 | Pat | | 7 | Anna | 3 | Pat | +----+--------+------------+--------------+
那么如何构建我的查询以给我我想要的东西?
请注意,此树可能只有3个级别,查询仍需要工作。
答案 0 :(得分:0)
Select
a.ID
,a.Name
,a.manager_ID
,b.Manager_Name
From
EmployeeTable As a
Left Join
EmployeeTable As b
On
a.Mangager_ID = b.ID
Where
a.Flag = 'Maintenance'
And
b.Flag = 'Manager'
这可以为您提供所需的信息。