2016-09-08 2 views
0

私は2つのテーブルを持っています。最初のテーブルTable0には、各アイテムのコードとそのアイテムの名前が格納されています。第2のテーブルTable1は、「父親」のアイテムコードと、各父親のための多数の「子供の」アイテムコードとを格納する。SQLリピートは異なる条件を結合します

Table0         Table1 
itemCode | itemName     fatherCode | childCode | childNum 
10101 | Item 1      10101  | 20101  | 1 
20101 | Sub-item 1     10101  | 20102  | 2 
20102 | Sub-item 2 

子供の目的は、父親を構成するためにどのような構成要素が必要であるかを示すことです。また、Table0には、それぞれの子アイテムのコードと名前が格納されています。

私は父親のコードと名前、そして父親の隣にある各子供のコードと名前を示したいと思います。

fatherCode | itemName | childCode | itemName2 | childNum 
10101  | Item 1 | 20101  | Sub-item 1 | 1 
10101  | Item 1 | 20102  | Sub-item 2 | 2 
私はそれだけで、繰り返しの単純なケースであろうと推測

が参加するが、異なる条件ではなく、itemName2列がちょうどである何を繰り返している:私は後だ何

はこのようなものです最初のitemName

私が試してみましたし、これは動作しませんでした何を:

SELECT 
T0.ItemCode, 
T0.ItemName, 
T1.Code, 
T2.ItemName, 
T1.Quantity, 
T1.ChildNum 

FROM Table0 T0 
LEFT JOIN Table1 T1 ON T1.Father = T0.ItemCode 
INNER JOIN Table0 T2 ON T2.ItemName = T0.ItemName 
LEFT JOIN Table1 T3 ON T3.Code = T2.ItemCode 

WHERE T1.ChildNum IS NOT NULL 

ORDER BY T1.ItemCode 
+1

t1左結合t0左結合t0 – jarlh

+2

レベル数に制限はありますか? (サブアイテムにはサブアイテムがあるサブアイテムがあります。サブアイテムには...がある場合)、階層をトラバースするには、再帰的なCTEを使用して "Loop"またはFor XML Pathステートメントを使用する必要があります。これが可能な場合は、階層クエリの結果が後になります。 – xQbert

+1

あなたはSQL Serverを求めてきました。あなたは再帰的なアプローチを試してみたいと思います。 Common-Table-Expression(CTE)のように:http://www.codeproject.com/Articles/31010/Recursion-in-SQL-using-CTE – Nebi

答えて

1

私はあなたがどんな左がここに参加する必要はないと思います。私はtable0ではなくtable1のクエリを構築する必要があると思います。

select t.fatherCode, f.itemName, t.childCode, c.itemName as itemName2, t.childNum 
    from Table1 t 
    join Table0 f 
    on f.itemCode = t.fatherCode 
    join Table0 c 
    on c.itemCode = t.childCode 
関連する問題