【发布时间】:2016-09-08 12:52:13
【问题描述】:
我有两张桌子。第一个表 Table0 存储每个项目的代码和该项目的名称。第二个表 Table1 存储一个“父亲”项目代码,然后存储每个父亲的多个“孩子”项目代码。
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
【问题讨论】:
-
t1 左连接 t0 左连接 t0
-
关卡数量有限制吗? (一个项目可以有一个子项目,该子项目具有子项目,子项目具有......)如果是这样,您需要使用递归 CTE 来“循环”或 For Xml Path 语句来遍历层次结构。如果这是可能的,那么您所追求的是分层查询的结果。
-
因为您要求使用 SQL-Server。我猜你想尝试一种递归方法。像 Common-Table-Expression (CTE):codeproject.com/Articles/31010/Recursion-in-SQL-using-CTE
标签: sql sql-server join sql-server-2016