连接两个表时,区别不起作用

时间:2013-06-24 00:47:59

标签: sql sql-server distinct

我有两个表:Employee和DealerSessions,它们基于EmployeeID链接。以下搜索查询不返回不同的EmployeeID。有什么想法吗?

SELECT  distinct e.EmployeeID, e.Name, e.Surname, ds.DealerSessionsID, ds.SessionID, ds.EmployeeID AS Expr1
FROM Employee AS e INNER JOIN
                      DealerSessions AS ds ON e.EmployeeID = ds.EmployeeID
WHERE (ds.SessionID = 154)

2 个答案:

答案 0 :(得分:3)

正确。 distinct返回所有字段的不同内容。如果你想要不同的EmployeeIds,那么尝试类似:

SELECT  distinct e.EmployeeID
FROM Employee AS e INNER JOIN
     DealerSessions AS ds ON e.EmployeeID = ds.EmployeeID
WHERE (ds.SessionID = 154)

其他字段会产生多行。如果你想要一行,那么你可以这样做:

select EmployeeID, Name, Surname, DealerSessionsID, SessionID, Expr1
from (SELECT e.EmployeeID, e.Name, e.Surname, ds.DealerSessionsID, ds.SessionID, ds.EmployeeID AS Expr1,
             row_number() over (partition by e.EmployeeId order by (select NULL)) as seqnum
      FROM Employee AS e INNER JOIN
           DealerSessions AS ds ON e.EmployeeID = ds.EmployeeID
      WHERE (ds.SessionID = 154)
     ) t
where seqnum = 1;

这随机选择一行。如果您想要特定行(如最近的行),请为order by选择另一个表达式。

答案 1 :(得分:0)

这是因为您还要将DealerSessions表中的列添加到SELECT语句中。

这两者之间可能存在一对多的关系,导致每个员工在DealerSessions表中有多个条目。

您可以在SELECT语句中删除某些列,也可以使用WHERE语句中的更多条件来缩小条件。