仅返回具有两个连接的第一个表的结果

时间:2014-12-08 21:08:21

标签: sql sql-server join

我有3张桌子。我需要从第一个表中获取姓氏,名字和员工编号,并从另一个表中获取名称。

为了让我在表格上得到名字,桌子上的slsrep列和表格sw之间需要匹配。

问题是我只想从第一个表(p)返回行。第一张表中只有700条记录,但它正在拉动900条。

基本上,我只想查看表p中的每一行并匹配表s中的名称。

这就是我目前所拥有的:

SELECT p.LastName,
       p.FirstName,
       p.EmpNo,
       s.Name
FROM   PDDA..PhoneDirectory p
       LEFT OUTER JOIN nxtsql..swsmsn sw
            ON  p.EmpNo = sw.EmpNo
       JOIN NxtSQL..SMSN s
            ON  sw.slsrep = s.slsrep
WHERE  sw.statustype = 1
ORDER BY
       p.LastName

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。一种是使用子选择来获取s.Name:

SELECT p.LastName, p.FirstName, p.EmpNo, (
  SELECT TOP 1 s.Name 
  FROM NxtSQL..SMSN s 
  INNER JOIN nxtsql..swsmsn sw 
    ON sw.slsrep = s.slsrep
  WHERE p.EmpNo = sw.EmpNo
  AND sw.statustype = 1
) AS Name
FROM PDDA..PhoneDirectory p
ORDER By p.LastName