无法查询单个表的多对多关系的全部范围

时间:2013-11-21 14:10:11

标签: sql sql-server stored-procedures

我有一个WorksOrder表,其中特定成员链接到同一个表中的其他WorksOrders。

为此,我创建了一个链接表,它将WorksOrders链接到另一个WorksOrder,并具有WorksOrderAID和WorksOrderBID列。

到目前为止,一切都运行良好,但是当我需要查询某个工作订单时,只返回具有直接链接的工作订单。

这是一个问题,因为它们都应该在同一级别,并且不遵循父/子关系。

如果有WorksOrders 0,1,2,3和4,并且所有都直接链接到0。

当我查询

SELECT WorksOrderBID from LinkedWorksOrders where WorksOrderAID = @WorksOrderID
UNION ALL
SELECT WorksOrderAID from LinkedWorksOrders where WorksOrderBID = @WorksOrderID

@WorksOrderID是WorksOrder 0,我收到了所有好的WorksOrders。

但是,如果@WorksOrderID为1,那么我只检索0,而不是全部检索0。 如果1,2,3和4链接到未直接链接到0的其他工单,这也会出现问题。

我正忙着处理存储过程以返回所有相关的工作订单,我强烈怀疑设计在某些时候出错,但我找不到它。

1 个答案:

答案 0 :(得分:0)

尝试在其他WorksOrderID之间插入缺失的链接:

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (1,1);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (1,2);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (1,3);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (1,4);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (2,2);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (2,3);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (2,4);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (3,3);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (3,4);

insert into LinkedWorksOrders (WorksOrderAID, WorksOrderBID)
values (4,4);

修改

或者,您可以自行加入您的链接工具,以便更深入地链接您的ID,但这并非详尽无遗:

SELECT w1.WorksOrderAID 
  from LinkedWorksOrders w1
 inner join
       LinkedWorksOrders w2
    on w1.WorksOrderBID = w2.WorksOrderBID
 where w2.WorksOrderAID = @WorksOrderID
UNION
SELECT w1.WorksOrderBID 
  from LinkedWorksOrders w1
 inner join
       LinkedWorksOrders w2
    on w1.WorksOrderAID = w2.WorksOrderAID
 where w2.WorksOrderBID = @WorksOrderID

如果你有工作订单1链接到工程订单2和工程订单2链接到3,那么查询1将不会产生3.但是如果你有1链接到2和3,它将在你查询时给2 3.希望它帮助