0
假设如下表:递归与SQL Server 2012
MS SQL Server 2012的架构设置:
CREATE TABLE entries
(
[entryID] [uniqueidentifier] NOT NULL,
[bOpen] [bit] NULL,
[nextEntryID] [uniqueidentifier] NULL,
);
INSERT INTO entries
(entryID, bOpen, nextEntryID)
VALUES
('21572F4C-BA63-489B-9205-AD1451CEE411', 0, NULL),
('FF4ADC83-1270-418B-8E31-FD1AEA2C1ADF', 0, '21572F4C-BA63-489B-9205-AD1451CEE411'),
('7ED7AF83-6595-4848-AFDF-4F7D54889F80', 1, NULL),
('C7AA25D3-B70D-45CB-A143-CF380E6FD0D3', 1, '7ED7AF83-6595-4848-AFDF-4F7D54889F80'),
('ADA3312E-6FF2-4EC6-9FE3-C994D2FCD16F', 1, 'C7AA25D3-B70D-45CB-A143-CF380E6FD0D3'),
('9BE0F5FA-09F0-423C-8173-98AD73522412', 0, NULL),
('5019558E-73FC-4A10-B526-49DB2253B9B9', 1, 'B2EF093A-45B4-4780-A5F5-ECEE02A26274'),
('B2EF093A-45B4-4780-A5F5-ECEE02A26274', 0, NULL)
查询1:
select * from entries
| ENTRYID | BOPEN | NEXTENTRYID |
|--------------------------------------|-------|--------------------------------------|
| 21572F4C-BA63-489B-9205-AD1451CEE411 | 0 | (null) |
| FF4ADC83-1270-418B-8E31-FD1AEA2C1ADF | 0 | 21572F4C-BA63-489B-9205-AD1451CEE411 |
---------------------------------------------------------------------------------------
| 7ED7AF83-6595-4848-AFDF-4F7D54889F80 | 1 | (null) |
| C7AA25D3-B70D-45CB-A143-CF380E6FD0D3 | 1 | 7ED7AF83-6595-4848-AFDF-4F7D54889F80 |
| ADA3312E-6FF2-4EC6-9FE3-C994D2FCD16F | 1 | C7AA25D3-B70D-45CB-A143-CF380E6FD0D3 |
---------------------------------------------------------------------------------------
| 9BE0F5FA-09F0-423C-8173-98AD73522412 | 0 | (null) |
---------------------------------------------------------------------------------------
| 5019558E-73FC-4A10-B526-49DB2253B9B9 | 1 | B2EF093A-45B4-4780-A5F5-ECEE02A26274 |
| B2EF093A-45B4-4780-A5F5-ECEE02A26274 | 0 | (null) |
正如你可能已经注意到了,我有一个字段nextEntryID
,其中包含链接的entryID
。
我在结果中分离出了含有多余元素的对。
最有趣的一对将是最后两个条目。两者都相互关联,但具有不同的bOpen
值(分别为1
和0
)。
我想要查看表格中的所有条目/配对,其中起始条目有bOpen = 1
,并链接到另一个条目bOpen = 0
。
理论上,可以有无限的条目相互链接,所以我想我们在这种情况下需要某种递归?
或者还有其他方法吗?
附加信息(感谢@ david.pfx):
- 的结构是这样的,我宁可不改变结构,虽然有可能增加的变化。
- 链接条目的“深度”不固定为2或3;我想大多数时候深度都不会超过4度,但这可能是可能的。
- 的
IDs
是全球唯一 - 任何方法/建议将是巨大的
需要更多的问题定义。这个数据结构是刚性定义的,还是您创建的?你能改变结构吗?链接深度是固定在2还是3,还是可以更深?这些ID是全球唯一的吗?你是否坚持一个单一的SQL查询,存储过程或算法代码的答案? –
@ david.pfx看到我上面的更新。 – seph
@KumarHarsh意识到什么?我完全知道用'NEWID()'生成的条目正在得到...一个新的ID。我这样做是因为它确实无关紧要。我认为这个问题很清楚,但似乎造成混淆,所以我会编辑。 – seph