2016-02-11 57 views
0

我正在研究sql分配以通过迭代地添加到现有的路径表中来确定有向图上各个节点之间的“分离程度”,更长的一个“链接”路径。 (链接是给定路径的长度为1)检查元组是否为sqlite非成员资格

作为此过程中的一个步骤,我创建了一个临时包含要添加到给定迭代中的新路径的表格,该迭代只是在先前的迭代扩展中添加的路径通过一个链接。

我的问题是阻止添加连接路径表中已经连接的两个节点的新路径。这里的路径被定义为(src, dst, length)。这些表格也与这些字段一起定义。

这是我的部分解决方案:

INSERT INTO pathsNew 
    select p.src, l.dst, 1 + length 
    from pathsLastUpdated as p, links as l 
    where p.dst=l.src and ...; 

我试着用下面的增强的where子句:

... (p.src, l.dst) not in (select src, dst from paths) 

但sqlite的好像不支持的元组。什么是最简单的工作?

回答

1

您可以使用:

WHERE 
    NOT EXISTS (SELECT * FROM paths P2 WHERE P2.src = P.src AND P2.dst = P.dst 

你会碰到这种做法的另一个潜在的问题虽然 - 即路径是循环不断。如果你只是寻找最短路径,并且你已经保证有一个路径,那么这可能是好的(可能只是一些额外的处理),但是如果路径可能不存在,那么最终可能会有一个无限循环。