【发布时间】:2018-02-09 05:47:45
【问题描述】:
我正在尝试构建一个查询,该查询将从一个表中检索员工信息,该表还包含一个名为“REPORTS_TO”的列,该列是另一个名为 POSITION_NBR 的字段的值(基本上员工和经理都在同一个表中)所以我想检索一行员工数据,然后在该行中的一个列中提取他们经理的姓名,该姓名在同一张表的另一行中引用。
例如,员工 John Smith 有一行“POSITION_NBR”等于“1234”,列“REPORTS_TO”等于“5678”在另一行,他的经理 Susie Snowflake 在同一个表中有她唯一的行“POSITION_NBR”等于“5678”(与另一行中的“REPORTS_TO”值相同)。多个员工可以共用一个经理,经理也有一个经理。
这是一个简单的查询,我在同一个表上使用不同的别名执行 LEFT OUTER JOIN。我得到不一致的数据,这是我正在使用的查询:
SELECT
A.COMPANY,
A.DEPTID,
A.DEPTNAME,
A.LOCATION,
A.NAME,
A.EMPLID,
A.REG_TEMP,
A.FULL_PART_TIME,
A.JOBCODE,
A.JOBTITLE,
A.SERVICE_DT,
A.TERMINATION_DT,
A.POSITION_NBR,
A.EMPL_STATUS,
A.REPORTS_TO,
AA.NAME AS MANAGER_NAME
FROM PS_EMPLOYEES A
LEFT OUTER JOIN PS_EMPLOYEES AA ON AA.POSITION_NBR = A.REPORTS_TO
--AND AA.EMPLID = A.EMPLID
如果我在最后一行删除未注释的代码(使其处于活动状态),我会得到正确的行数,但是最后一列(AA.NAME AS MANAGER NAME)在每一行上都有所有 NULL 值(应该没有任何空值,因为所有员工都分配了经理)。如果我将此行注释掉(如下所述),那么我的结果中会增加大约 2,700 行(员工姓名与不同的经理姓名重复)
感谢任何帮助,谢谢!
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
-
使用左连接而不是左外连接。然后使用 GROUP BY employeeID。我认为这会给你你所需要的。
标签: sql