我应该使用自我加入

时间:2010-10-05 13:00:32

标签: sql

如果我有桌子......

  ID     Name   Manager 
  0      Joe    Sue  
  1      Jake   Tom
  0      Joe    Tom
  2      Larry  Red
  2      Larry  Paul
  1      Jake   Paul

我希望输出为....

 ID   Name   Manager1    Manager2
 0    Joe    Sue         Tom
 1    Jake   Tom         Paul
 2    Larry  Red         Paul

谢谢...

3 个答案:

答案 0 :(得分:4)

如果我已正确理解您的请求,是的,会产生您正在寻找的结果。

SELECT
t1.Name Name,
t1.Manager Manager1,
t2.Manager Manager2
FROM
Table t1
inner join Table t2 on t1.Manager = t2.Name

当然,返回索引列的外键优先于性能的强大比较。

答案 1 :(得分:3)

是的,如果你的桌子被称为'经理':

SELECT Mgr1.ID,Mgr1.Name,Mgr1.Manager,Mgr2.Manager
FROM Managers AS Mgr1
LEFT JOIN Managers AS Mgr2
ON Mgr1.ID=Mgr2.ID

答案 2 :(得分:0)

如果你保持桌子加入是最好的。

如果你讨厌加入,你可以将最大和最小管理者结合起来,即使这样,如果总有2个经理并且他们不能有相同的名字,它也会起作用。

如果我记得如何正确连接2个查询,则以下内容应该有效。但我建议你看看是否有可能重做你的桌子,在经理员工关系中有一个单独的表格将人们联系起来。

SELECT DISTINCT 
    F.ID, F.Name, S.Manager, F.Manager
FROM 
    (SELECT 
         ID, Name, MIN(manager) manager 
     FROM Managers 
     GROUP BY ID, Name) F,
    (SELECT
         ID, Name, MAX(manager) manager 
     FROM Managers 
     GROUP BY ID, Name) S
WHERE 
    F.ID = S.ID
    AND S.Manager <> F.Manager
    AND F.ID < S.ID