2010-01-24 114 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