如果我有一张桌子...
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
谢谢...
如果我正确理解了您的请求,是的,类似的东西会产生您正在寻找的结果。
SELECT
t1.Name Name,
t1.Manager Manager1,
t2.Manager Manager2
FROM
Table t1
inner join Table t2 on t1.Manager = t2.Name
当然,返回索引列的外键将优先于性能的强比较。
是的,如果您的桌子被称为“经理”:
SELECT Mgr1.ID,Mgr1.Name,Mgr1.Manager,Mgr2.Manager
FROM Managers AS Mgr1
LEFT JOIN Managers AS Mgr2
ON Mgr1.ID=Mgr2.ID
如果您保留表,则最好进行连接。
如果你讨厌连接,你可以组合最大和最小经理,即使这样,如果总是有 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
如果我使用MySql进行回答。我同意Andy的回答,但稍作修改,就像这样的代码:
-- DDL Schema SQL
CREATE TABLE Managers (
`ID` INTEGER,
`Name` VARCHAR(5),
`Manager` VARCHAR(4)
);
INSERT INTO Managers
(`ID`, `Name`, `Manager`)
VALUES
('0', 'Joe', 'Sue'),
('1', 'Jake', 'Tom'),
('0', 'Joe', 'Tom'),
('2', 'Larry', 'Red'),
('2', 'Larry', 'Paul'),
('1', 'Jake', 'Paul');
-- DQL Query SQL
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
-- The others SQL Database manager maybe?
-- AND S.Manager <> F.Manager
-- AND F.ID < S.ID
如果您想查看 MySQL 数据库演示,请单击 DB-Fiddle.com 上的此链接。