我会简化这一点,希望有人可以提供帮助:)
Table A
ID ItemID
1 12
2 13
3 14
4 15
5 16
6 17
11 19
Table B
BID ItemID
8 10
7 11
6 12
9 13
10 14
11 17
将A.ItemID加入B.ItemID以获取BID 一旦我获得了BID,我需要将其加入A.ID以获取相关的A.ItemID以将其连接回B.BID以获取下一个B.ItemID,依此类推,直到BID为NULL
因此,例如表A ID 1(ItemID 12)将链接到B.ItemID 12以检索BID 6,这将链接回表A ID 6以获得ItemID 17,这将链接到表B ItemID 17到获取BID 11以链接回ID 11上的表A以获取ItemID 19,依此类推,直到BID为NULL
这可能会达到10-15级深度,因此嵌套选择不够动态,所以我需要在While循环中实现这一点
有什么想法吗?
答案 0 :(得分:1)
尝试这是否有效:
创建架构:
CREATE TABLE A
(
ID INT
, ItemID INT
)
CREATE TABLE B
(
BID INT
, ItemID INT
)
INSERT INTO A (ID, ItemID)
VALUES (1, 12)
, (2, 13)
, (3, 14)
, (4, 15)
, (5, 16)
, (6, 17)
, (11, 19)
INSERT INTO B (BID, ItemID)
VALUES (8, 10)
, (7, 11)
, (6, 12)
, (9, 13)
, (10, 14)
, (11, 17)
递归CTE和选择:
WITH Rcte AS
(
SELECT A.ID ID
, A.ID ID_A
, A.ItemID ItemID_A
, B.BID BID_B
, B.ItemID ItemID_B
, 1 Nr
FROM A
JOIN B
ON B.ItemID = A.ItemID
UNION ALL
SELECT Rcte.ID
, B.BID ID_A
, A.ItemID ItemID_A
, B.BID ID_B
, B.ItemID ItemID_B
, Rcte.Nr + 1
FROM rCTE
JOIN B
ON B.ItemID = Rcte.ItemID_A
JOIN A
ON A.ID = B.BID
WHERE B.BID IS NOT NULL
)
SELECT SOL.ID
, SOL.ItemID
FROM (
SELECT ID_A ID
, ItemID_A ItemID
, A.ID CTE_ID
FROM Rcte A
UNION
SELECT BID_B
, ItemID_B
, B.ID
FROM Rcte B
) SOL
WHERE SOL.CTE_ID = 1
结果:
ID ItemID
1 12
6 12
6 17
11 17
11 19