我想有条件地将查询加入到自身。
查询:
SELECT Part, MtlPart, Qty
FROM Mtl
结果:
Part MtlPart Qty
1 100 1
1 101 2
1 102 2
2 200 1
2 201 1
100 120 1
100 121 1
100 122 1
120 A20 1
120 A21 1
MtlParts也是零件。我想要做的是将此查询加入到自身中,以便获得连接部分列表。
例如:
SELECT *
FROM
(SELECT Part, MtlPart, Qty
FROM Mtl) AS A
INNER JOIN
(SELECT Part, MtlPart, Qty
FROM Mtl) AS B
ON a.MtlPartNum = b.PartNum
WHERE Part = 1
会返回类似的内容:
a.Part a.MtlPart a.Qty b.Part b.MtlPart b.Qty
1 100 1 100 120 1
1 100 1 100 121 1
1 100 1 100 122 1
1 101 1 NULL NULL NULL
1 102 1 NULL NULL NULL
我希望将此查询加入到自身,直到联接查询仅返回空值。在此示例中,第1部分将返回数据,直到达到MtlParts A20和A21,因为它们未被列为部件。
老实说,我不确定最好的方法。任何帮助或建议都非常感谢。
答案 0 :(得分:1)
您的查询看起来是一种合理的方法,尽管您似乎需要外部联接而不是内部联接。我会删除子查询并添加别名:
SELECT a.Part, a.MtlPart, a.Qty, b.Part, b.MtlPart, b.Qty
FROM Mtl A LEFT JOIN
Mtl B
ON a.MtlPartNum = b.PartNum
WHERE A.Part = 1;
答案 1 :(得分:1)
如果您只想访问有限数量的嵌套级别,那么您应该多次为每个级别重新加入表格,然后从子表格中选择。根据您的示例,这应该是这样的:
SELECT A.Part As APart,
A.MtlPart As AMtlPart,
A.Qty As AQty,
B.Part As BPart,
B.MtlPart As BMtlPart,
B.Qty As BQty,
C.Part As CPart,
C.MtlPart As CMtlPart,
C.Qty As CQty,
FROM Mtl AS A
Left Outer JOIN Mtl AS B
ON A.MtlPartNum = B.Part
Left Outer JOIN Mtl AS C
ON B.MtlPartNum = C.Part
WHERE A.Part = 1
这将产生结果集
APart AMtlPart AQty BPart BMtlPart BQty CPart CMtlPart CQty
1 100 1 100 120 1 120 A20 1
1 100 1 100 120 1 120 A21 1
1 100 1 100 121 1 Null Null Null
1 100 1 100 122 1 Null Null Null
1 101 1 Null Null Null Null Null Null
1 102 1 Null Null Null Null Null Null
通过添加更多Joins
,您可以增加看起来的深度。正如我在评论中提到的,你不应该动态地这样做。这意味着您只能选择要编写多少个连接,因此如果您知道要查看零件子零件的级别,此方法最有效。