1

これがn00bの質問である場合は申し訳ありません。私は T-SQL の専門家ではありませんが、実用的な理解はしています。私はこれを明確にしようとしますが、最初はややこしいです。

問題

私は2つのテーブルを持っています。テーブル A はアイテムを表し、テーブル B はアイテム間の関係を表します。

テーブル A: アイテム ID、名前、...

表 B: ParentID、ThisID、ChildID

私が直面している問題は、テーブル B の 3 つの ID すべてがテーブル 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)

質問

ORDER BYグループ化を維持しながら、同じフィールド (テーブル A.Name)を使用するにはどうすればよいですか?

ノート

私はこれを読みました:SQL Ordering by Date but Maintain Foreign Key Groupingsですが、答えが私の質問に合っているとは思いません。ここと Google で質問を探しましたが、重複が見つかりません。

4

1 に答える 1

1

BTable の ID を Tableの名前にリンクできるように、テーブルを結合する必要がありますABTableにリンクする Tableには 3 つの異なる IDがあるため、Table に3 回A参加する必要があります。A物事を整理するために、、、などのエイリアスを使用することをお勧めしA_Parentます。期待どおりに注文する必要がある例を次に示します。A_ChildA_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
于 2013-03-05T22:11:58.093 に答える