2010-01-24 115 views
0
person_id | manager_id | name | 
      |   |  | 
------------------------------- 

我必须显示每个人的姓名与经理姓名。新的SQL查询解决方案

是它的完整表格。这就是我的全部。

+0

这是完整的表?它是自引用吗? – 2010-01-24 10:07:42

+0

+1,因为我很高兴在5分钟之内询问TWICE,在SOF – 2010-01-24 10:31:02

+1

-1上看到这样一个很好,简短,清晰的问题:http://stackoverflow.com/questions/2126728/sql-query-for-this – 2010-01-24 11:03:22

回答

5

这个应该给你所有有经理的员工,其中employee_namemanager_name。用您的表名替换your_table

如果你想让所有的人,也没有经理,取代JOINLEFT JOIN。对于没有manager_id的所有人员,这将返回NULL作为manager_name

SELECT t1.name employee_name, t2.name manager_name 
FROM [your_table] t1 
JOIN [your_table] t2 ON (t1.manager_id = t2.person_id) 
4

哪种SQL方言?这里有一些TSQL,但我对实际问题(“每个有经理姓名的人”)都含糊不清。如果你的意思是“给经理的名字,列出人(报告)”,然后:

SELECT peon.[person_id], peon.[name] 
FROM [thetable] mgr 
INNER JOIN [thetable] peon 
    ON peon.manager_id = mgr.[person_id] 
WHERE mgr.[name] = @name 
ORDER BY peon.[name] 

如果你的意思是“列表中的人员,与他们的经理的名字一起”,则:

SELECT peon.[person_id], peon.[name], mgr.[name] AS [manager] 
FROM [thetable] peon 
LEFT OUTER JOIN [thetable] mgr 
    ON mgr.[person_id] = peon.manager_id 
ORDER BY peon.[name] 
+0

+1将'mgr'重命名为'raider',这是正确的答案! – Andomar 2010-01-24 10:29:39

+1

不,它应该是'mrg'而不是'mgr',因为这是TQSL,而不是T-SQL。 ;) – 2010-01-24 13:01:53

+0

@Mark - 每个人都是批评家! – 2010-01-24 19:44:11

0
SELECT person.name, manager.name 
FROM table person, table manager 
WHERE person.manager_id = manager.person_id 
+2

-1旧样式JOIN – gbn 2010-01-24 10:11:19

+1

@gbn:它被称为*隐式连接符号*不是“旧样式连接”。禁止使用它吗?或者为什么它不好?尽管如此, – 2010-01-24 10:15:42

+0

仍然有效! – 2010-01-24 10:19:06