【发布时间】:2016-08-24 19:30:27
【问题描述】:
我有 1 张桌子:
Contacts (ID integer, Name text, ATT_ID integer)
我的表充满了这些值:
(1, 'Alice', 1)
(2, 'Bob', 1)
(3, 'Carol', 1)
(4, 'Dave', 4)
(5, 'Eve', 4)
(6, 'Frank', 6)
目标是将这些联系人 ID 与配对的 ATT_ID 连接起来。
这是我当前的 SQL 代码:
SELECT t1.ID as ID, t1.Name , tt.Name , tt2.Name
FROM Contacts as t1
LEFT JOIN (
SELECT MIN(t2.ID), t2.Name, t2.ATT_ID FROM Contacts as t2
WHERE t2.ID <> t2.ATT_ID)
AS tt ON t1.ID = tt.ATT_ID
LEFT JOIN (
SELECT MAX(t3.ID), t3.Name, t3.ATT_ID FROM Contacts as t3
WHERE t3.ID <> t3.ATT_ID)
AS tt2 ON t1.ID = tt2.ATT_ID
WHERE t1.ID = t1.ATT_ID;
我的结果是:
Alice | Bob | null
Dave | null | Eve
Frank | null | null
但是想要的结果应该是这样的:
Alice | Bob | Carol
Dave | Eve | null
Frank | null | null
我怎样才能做到这一点?
【问题讨论】:
-
哪个 RDBMS? MySQL、SQL Server Oracle 其他?
-
RDBMS:SQL 甲骨文
标签: sql oracle join max left-join