SQLite DELETE 使用 WITH 语句

SQLite DELETE using WITH statement

我的道路图中正好有一个长度为 3 的循环。我试图删除一条从 A-B 到 B-A 的道路,这是循环的一部分。如果我删除一条路,它将删除循环并使我的图形成为一棵树。通过使用 with 语句,我能够找到实现该目的的道路。但是,我想根据我发现的内容从原始 table 中删除,但我似乎无法在我的代码中使用 delete 语句。我听说过 "joins",但我不确定如何在这里使用它,希望得到一些建议。

下面的代码找到了对长度为 3 的循环有贡献的多条道路,但我将其限制为 1,因为我只想删除一条道路。

%%sql 
with cycle as(
select s1.A as s1, s3.A as s3
from streets s1, streets s2, streets s3
where s1.B = s2.A and s2.B = s3.A and s3.B = s1.A
limit 1)

select A, B
from streets, cycle
where (s1 = A and s3 = B) or (s3 = A and s1 = B)

Returns:

我想删除原来 table 中与这些 A 和 B 值匹配的两行,从而删除 GadgetCo 和 Thing Industries 之间的道路

where子句中的匹配条件可以使用exists

with cycle as (
      select s1.A as s1, s3.A as s3
      from streets s1 join
           streets s2 
           on s1.B = s2.A join
           streets s3
           on s2.B = s3.A and s3.B = s1.A
      limit 1
     )
delete from streets
    where exists (select 1
                  from cycle c
                  where (streets.A = c.s1 and streets.B = c.s3) or
                        (streets.A = c.s3 and streets.B = c.s1)
                 );

请注意,我用正确的、显式的 标准 JOIN 语法替换了隐式连接。