我正在使用SQL Server 2016,但这不是2016年的问题。这就是我想做的事情。我将拥有用户的电子邮件地址,并需要为该用户获取数据。所以这很简单:
select [firstname],[lastname],[managerid] from employees where workemail='emp@company.com'
很直接,但请注意我拉着经理的身份。而且我现在需要为经理提供完全相同的数据,没有经理的身份:
select [firstname],[lastname] from employees where mamangerid=manager_id_from_employee_query
您可以看到所有数据都在同一个表中。我可以在这里停下来,因为我有我的数据,但我喜欢学习并寻找更好的解决方案。如何在不必编写2个单独的SQL语句或什么是更好的解决方案的情况下实现我想要做的事情?
答案 0 :(得分:5)
您可以进行左连接。左侧表达式将包含员工,右侧将链接到同一表中的一行并获取经理的信息(假设它存在)。不要进行内部联接,因为如果"经理"行丢失了,那么你就不会为员工得到任何东西。
Select [e].[firstname] [emp_fname]
, [e].[lastname] [emp_lname]
, Manager.[firstname] [mgr_fname]
, Manager.[lastname] [mgr_lname]
From [employees] [e]
Left Join [employees] Manager
On [e].[employee_id] = Manager.[managerid]
答案 1 :(得分:2)
您可以使用自我联接,其中表的第一个实例表示员工的详细信息,第二个表示经理的详细信息:
SELECT e.[firstname], e.[lastname], m.[firstname], m.[lastname]
FROM employees e
LEFT JOIN employees m ON e.[managerid] = m.[id]
WHERE e.workemail = 'emp@company.com'
答案 2 :(得分:1)
这应该会给你正确的结果:
SELECT a.firstname, a.lastname FROM employees a RIGHT JOIN
(SELECT managerid FROM employees WHERE workemail = 'emp@company.com') b
WHERE a.managerid = b.managerid