2013-03-05 55 views
1

对不起,如果这是一个n00b问题。我不是T-SQL专家,但我有一个工作的理解。我会尽量说清楚这一点,但从一开始就有点令人困惑。通过多个外键排序相同表

问题

我有两个表。表A表示项目,表B表示项目之间的关系。

表A:项ID,姓名,...

表B:PARENTID,ThisID,childID的

我现在面临的问题是,所有三个ID表B,点在主键表A,但我需要按照每个关系角色分组排列A.Name的结果(如果有意义的话)。

所以,如果表A有:

1 ItemZ 
2 ItemA 
3 ItemD 
4 ItemX 
5 ItemT 

和表B有:

1 3 5 
1 2 4 
1 3 4 
1 2 3 
2 4 5 
1 2 5 

我希望把结果返回给由父项的名称进行分组,然后在“本”项目名称,然后子项目的名称...在此方案中:

2(A) 4(X) 5(T) 
1(Z) 2(A) 3(D) 
1(Z) 2(A) 5(T) 
1(Z) 2(A) 4(X) 
1(Z) 3(D) 5(T) 
1(Z) 3(D) 4(X) 

问题

如何在维护分组的同时在同一字段(表A.Name)上使用ORDER BY

我读过这个:SQL Ordering by Date but Maintain Foreign Key Groupings,但我不认为答案适合我的问题。我在这里和谷歌上查找了我的问题,但我找不到重复的内容。

回答

1

您需要将表连接在一起,以便您可以将表B中的ID与表A中的名称链接起来。由于表B中有三个不同的ID,它们链接到表A,所以您需要三次加入表A。为了保持组织性,我建议使用别名A_ParentA_Child,A_This。下面是应该为了按预期的方式例如:

select 
    B.ParentID, B.ThisID, B.ChildID 
from 
    TableB B 
join 
    TableA A_Parent on A_Parent.ItemID = B.ParentID 
join 
    TableA A_This on A_This.ItemID = B.ThisID 
join 
    TableA A_Child on A_Child.ItemID = B.ChildID 
order by 
    A_Parent.Name, A_This.Name, A_Child.Name 

样本输出(DEMO):

PARENTID | THISID | CHILDID 
----------------------- 
    2  | 4  | 5 
    1  | 2  | 3 
    1  | 2  | 5 
    1  | 2  | 4 
    1  | 3  | 5 
    1  | 3  | 4 
+0

'ORDER BY A_Parent.Name,A_This.Name,A_Child.Name'是我需要的东西。谢谢! – 2013-03-07 14:58:24