从数据库

时间:2015-07-20 10:58:32

标签: sql database join sybase-ase

我有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      

我想选择一个状态为开放的员工以及所有拥有相同组的兄弟姐妹。

示例 - 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 个答案:

答案 0 :(得分:0)

您可以尝试: -

SELECT E.employeeID, P.parentID
FROM EmpInfomartion E, EmpAccount P
WHERE Group IN (SELECT Group
                FROM EmpInfomartion
                WHERE Status = 'Open')
AND E.employeeID = P.employeeID;