检查sqlite

时间:2016-02-11 18:29:43

标签: sql sqlite tuples membership

我正在进行sql赋值,通过迭代地添加到现有的路径表,一个“链接”更长的路径,来确定有向图上各个节点之间的“分离程度”。 (链接是长度为1的给定路径)

作为此过程中的一个步骤,我创建了一个临时包含要在给定迭代中添加的新路径的表,这只是在上一次迭代中添加的路径,这些路径是由一个链接扩展的。

我的问题是阻止添加连接路径表中已连接的两个节点的新路径。此处的路径定义为(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 个答案:

答案 0 :(得分:1)

您可以使用:

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

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