0

我有两个表: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)
4

2 回答 2

3

正确的。 distinct返回不同的所有字段。如果您想要不同的 EmployeeId,请尝试以下操作:

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.

于 2013-06-24T00:49:08.397 回答
0

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

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

您可以从 SELECT 语句中删除一些列,或者在 WHERE 语句中使用更多条件来进一步缩小条件。

于 2013-06-24T09:39:25.330 回答