0

我正在开发一个项目,该项目使用 MariaDB v5.5 数据库来跟踪基于树的更高层次中的员工。这棵树中的每个人都可以有各种与之相关的“标志”。在这种情况下,这些标志使用位掩码存储。

我的对象如下所示

员工表说明
+--------------+-------------+-------- ------------------+
| 姓名 | 领域 | 说明 |
+--------------+-------------+-------- ------------------+
| 员工编号 | 情报 | 唯一键 |
| 姓名 | VARCHAR(45) | 员工姓名 |
| 旗帜 | 整数(4) | 员工属性的位掩码 |
| parent_id | 情报 | 父记录的employee_id |
+--------------+-------------+-------- ------------------+

“标志”位图描述
+-----+--------------+
| 位 | 旗帜 |
+-----+--------------+
| 0 | 首席执行官 |
| 1 | 经理 |
| 2 | 项目领导 |
| 3 | 销售人员 |
| 4 | 维护 |
+-----+--------------+

员工表数据
+----+--------+------------+---------- -----+
| 编号 | 姓名 | parent_id | 旗帜 |
+----+--------+------------+---------- -----+
| 1 | 丽莎 | 空 | 首席执行官 |
| 2 | 史蒂夫 | 1 | 经理 |
| 3 | 帕特 | 1 | 经理 |
| 4 | 玛丽 | 2 | 销售人员,项目负责人 |
| 5 | 菲尔 | 4 | 销售人员,维护 |
| 6 | 吉姆 | 3 | 销售人员,维护 |
| 7 | 安娜 | 3 | 销售人员,维护 |
+----+--------+------------+---------- -----+

假设我想查询所有具有“MAINTANCE”标志的员工,但我需要返回具有“MANAGER”标志的父记录的 id。所以我的结果应该是这样的。

> 从...中选择 id、名称、manager_id、manager_name
+----+--------+------------+--------------+
| 身份证 | 姓名 | manager_id | 经理姓名 |
+----+--------+------------+--------------+
| 5 | 菲尔 | 2 | 史蒂夫 |
| 6 | 吉姆 | 3 | 帕特 |
| 7 | 安娜 | 3 | 帕特 |
+----+--------+------------+--------------+

那么如何构建我的查询来给我想要的东西呢?

请注意,这棵树的深度可能不止 3 层,而且查询仍然需要工作。

4

1 回答 1

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'

这应该给你你正在寻找的东西。

于 2013-05-28T14:55:03.353 回答