我有两个表: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)
答案 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语句中的更多条件来缩小条件。