【发布时间】:2015-07-20 10:58:32
【问题描述】:
我有 2 个表employeeAccount 和employeeInfo。我不允许修改表格。使用 Sybase 数据库。
employeeAccount
=============================
employeeID parentID
S1 P1
S2 P1
S3 P1
S4 P1
S5 P1
S6 P3
S6 P4
S7 P4
S8 P4
Second table: employeeInfo
==============================
employeeID Group Status
S1 0
S2 0 OPEN
S3 0
S4 1
S5 1
S6 0
S7 0
S8 1
我想选择一个状态为 open 的员工及其所有具有相同组的兄弟姐妹。
示例- S2 状态为打开,S2 同级为 S1、S3、S4、S5。我只想要 S1、S2 和 S3 的数据,因为它们都来自同一个组 No 0 并且具有相同的 ParentID P1 。
在我的方法中,我首先找到处于 OPEN 状态的员工,然后找到它的所有兄弟姐妹。然后我选择唯一具有相同组的兄弟姐妹。
select DISTINCT emp.employeeID, emp.parentID from employeeAccount emp
JOIN (
SELECT DISTINCT e.employeeID, e.parentID, info.Group FROM employeeAccount e, employeeInfo info
WHERE e.employeeID = info.employeeID
AND info.status = 'OPEN'
) Details
ON Details.parentID = emp.parentID
WHERE Details.Group = (SELECT Group from employeeInfo where employeeID = emp.employeeID)
通过这个查询,我获取了 S2 和他的父 P1,因为 S2 状态为 OPEN,然后我获取了父 P1 下的所有员工,然后我选择了 S1、S2 和 S3,因为它们来自同一个组 0。
如果我的方法有误,或者是否有更好的方法,请告诉我。
【问题讨论】:
-
如果群组
1处于打开状态怎么办? -
那么它也会给第1组的所有员工。 S4 和 S5 也将包括在内。
-
您使用的是哪个 DBMS?
-
使用 Sybase 数据库