【问题标题】:get relevant data from Database从数据库中获取相关数据
【发布时间】: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 数据库

标签: sql database join sap-ase


【解决方案1】:

你可以试试:-

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;

【讨论】:

  • 它将如何给出 S1、S2 和 S3
  • 它还会给出 S!、S2、S3 和 S6、S7。因为它们也属于第 0 组,与 S1、S2 和 S3 相同。
  • 我想我无法很好地解释这个问题。这是我的错误。如果 S6 和 S7 的状态不是 OPEN,则不应包括它们,因为它们来自不同的父级。但是根据您的解决方案,如果它们的状态不是 OPEN,它将包括 S6 和 S7。
  • 同 SELECT P.employeeID, P.parentID FROM EmpInfomartion E, EmpAccount P WHERE E.groupID = 1 AND E.employeeID = P.employeeID ;
  • 那么在这里你将如何确定要选择哪个 S。意味着有一些标准来决定特定的 ParentID
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2018-11-01
  • 2013-08-29
相关资源
最近更新 更多