当我只返回1时,加入返回2行

时间:2014-04-15 06:16:53

标签: sql sql-server

我有以下查询,由于以下部分:

        **LEFT JOIN dbo.Employee Mgr ON 
        (Pos.PPOSRP = Mgr.APOSNO AND Mgr.AACCT = Emp.AACCT)**

正在返回多条记录。虽然它是有效数据,但我只需要通过此连接返回一条记录。我怎么能相应改变呢?

        FROM dbo.Employee as Emp
        LEFT JOIN dbo.Position Pos ON Emp.APOSNO = Pos.PPOSNO
        LEFT JOIN dbo.Location Loc ON Emp.ALOCN = Loc.LCODE
        **LEFT JOIN dbo.Employee Mgr ON 
        (Pos.PPOSRP = Mgr.APOSNO AND Mgr.AACCT = Emp.AACCT)**
        where Emp.AEMPNO = '004635'
        ORDER BY Emp.AEMPNO

2 个答案:

答案 0 :(得分:0)

您正在加入Employee表,以获取员工的经理或负责人的数据。如果条件:

Pos.PPOSRP = Mgr.APOSNO AND Mgr.AACCT = Emp.AACCT

...选择两行,然后你应该验证它为什么这样做。显然不足以在该表上仅隔离一行。您可能必须在AND中添加一些其他条件以选择所需的条件。也许这个职位在不同的时间被两个不同的人所覆盖,那么你可能需要添加一些条件来选择一个感兴趣的SELECT语句的时间框架。

作为旁注,我想知道为什么当你说你期望在结果集中只有一行时,你正在对AEMPNO进行排序。

答案 1 :(得分:0)

虽然您有多种选择,但您可以这样做:

FROM dbo.Employee as Emp
LEFT JOIN dbo.Position Pos ON Emp.APOSNO = Pos.PPOSNO
LEFT JOIN dbo.Location Loc ON Emp.ALOCN = Loc.LCODE
OUTER APPLY 
    (SELECT TOP 1 * FROM dbo.Employee Mgr 
    WHERE Mgr.APOSNO = Pos.PPOSRP AND Emp.AACCT = Mgr.AACCT) Mgr
where Emp.AEMPNO = '004635'
ORDER BY Emp.AEMPNO

如果你想返回仅按某种方式排序的第一行,你可以像往常一样在OUTER APPLY中插入ORDER BY。